98
№4(29) апрель 2005 подписной индекс 81655 www.samag.ru №4(29) апрель 2005 Почтовая система Alt-N MDaemon Базовая настройка маршрутизатора Cisco Windows Server Update Services Apache как прокси-сервер Виртуальная машина SVISTA Архивируем данные с помощью Bacula Защита коммуникаций Windows Mobile Система создания документации POD Оптимизация циклов под Linux Почтовая система Alt-N MDaemon Базовая настройка маршрутизатора Cisco Windows Server Update Services Apache как прокси-сервер Виртуальная машина SVISTA Архивируем данные с помощью Bacula Защита коммуникаций Windows Mobile Система создания документации POD Оптимизация циклов под Linux

029 Системный Администратор 04 2005

Embed Size (px)

DESCRIPTION

Почтовая система Alt-N MDaemon Базовая настройка маршрутизатора Cisco Windows Server Update Services Apache как прокси-сервер Виртуальная машина SVISTA Архивируем данные с помощью Bacula Защита коммуникаций Windows Mobile Система создания документации POD Оптимизация циклов под Linux №4(29) апрель 2005

Citation preview

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

№4(29) апрель 2005подписной индекс 81655

www.samag.ru

№4(

29)

апре

ль 2

005

Почтовая системаAlt-N MDaemon

Базовая настройкамаршрутизатора Cisco

Windows Server Update Services

Apache как прокси-сервер

Виртуальная машина SVISTA

Архивируем данныес помощью Bacula

Защита коммуникацийWindows Mobile

Система созданиядокументации POD

Оптимизация цикловпод Linux

Почтовая системаAlt-N MDaemon

Базовая настройкамаршрутизатора Cisco

Windows Server Update Services

Apache как прокси-сервер

Виртуальная машина SVISTA

Архивируем данныес помощью Bacula

Защита коммуникацийWindows Mobile

Система созданиядокументации POD

Оптимизация цикловпод Linux

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

1¹4, àïðåëü 2005

оглавление

ТЕНДЕНЦИИ 5, 6

СОБЫТИЯ 3

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

Автоматизация MS Windows,или AutoIt как мечта эникейщикаЧасть 1

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

Windows Server Update Services

Сергей Сергеев[email protected] 8

Чудо-юдо Resource Kit

Александр Шибенко[email protected] 16

Alt-N MDaemon – почтовая системадля средних и крупных компаний

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

Система вещания на основеWindows Media Services 9

Михаил Платов[email protected] 28

Kaspersky Anti-Spam 2.0 + Sendmail

Денис Городецкий[email protected] 25

SVISTAть всех наверх!

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

Apache как прокси-сервер

Валентин Синицын[email protected] 34

Архивируем данные с помощью Bacula

Алексей Гринько[email protected] 42

Базовая настройка маршрутизатораCisco начального уровня

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

Реинкарнация данных

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

Slackware на ракетном топливе,или Обзор VectorLinux 5.0.1 SOHO

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

Защита коммуникаций Windows Mobile

Наталья Мельникова[email protected] 60

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

Управление безопасностьюInternet Explorer

Наталья Мельникова[email protected] 66

Техника оптимизации под LinuxЧасть 3

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

Система создания документации PODЧасть 2

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

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

ОБРАЗОВАНИЕ

Сервер для школ

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

BUGTRAQ 87, 94

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

Спешите оформить подписку на второе полугодие 2005 года!Подписной купон на стр. 95

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

2

конкурс

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

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

В составе команды может быть 3 или 4 человека. Закаждым человеком закрепляется определенная функция:Руководитель проекта, Исполнитель решения, Составительпроектной документации или Демонстратор решения.

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

Среди призов следует особо отметить домашний ин-тернет-центр ZyXEL P-662 HW ЕЕ, лицензионную копиюWindows XP Professional и бесплатное обучение по любомукурсу Microsoft с последующей международной сертифи-кацией. Участники лучшей команды получат в подарок го-довую подписку на журнал «Системный администратор».

К участию в турнире приглашаются студенты всех мос-ковских вузов. При этом организаторы заявляют, что «Ку-бок сетевых проектов Microsoft» – это не олимпиада и несоревнование «для самых умных», так как не всем в ко-манде нужна техническая подготовка. Многое в итоге бу-дет зависеть не только от тех, кто будет настраивать обо-рудование, а от тех, кто будет писать техническую доку-ментацию и демонстрировать проект независимой комис-сии. Для всех, кто сомневается в собственных силах, Учеб-ный центр ВМК МГУ & SoftLine Academy (на базе которогопроводится турнир) будет проводить специальное обучение,готовящее к выполнению проекта.

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

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

По описанию турнир кажется достаточно интересным,чтобы принять в нем участие, потратить немного собствен-ного времени и вплотную познакомиться с современнымиIT-технологиями, такими как ADSL, VPN, беспроводной до-ступ, распределенная система Active Directory, WEP/WPA и802.1x. Если учесть, что в рамках турнира также предлага-ется и обучение, в ближайшее время организаторам сле-дует ждать настоящего шквала заявок на участие.

Турнир организован компаниями Microsoft и SoftLine приподдержке московского представительства компании ZyXEL.Регистрация на него открыта с 4 апреля 2005 г. на сайтеhttp://www.it-university.ru/itproject.

Организаторы турнира:

Информационная поддержка:

Генеральный партнер:

Ãëàâíûé ïðèç îò êîìïàíèè ZyXEL � èíòåðíåò-öåíòð P-662 HW ÅÅ

IT-ТУРНИР СТУДЕНЧЕСКИХ КОМАНД«КУБОК СЕТЕВЫХ ПРОЕКТОВ MICROSOFT»

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

3¹4, àïðåëü 2005

события

Как мы уже писали в одном из последних номеров, с 27 по29 апреля в Москве будет проходить Open Source ForumRussia – первое в России информационно-выставочное ме-роприятие, которое соберет вместе российских, американ-ских и европейских лидеров индустрии Open Source, веду-щих поставщиков технологий с открытым исходным кодоми заказчиков, заинтересованных в развертывании надеж-ных и экономичных Linux-решений, а также российские IT-компании, которые намерены развивать собственные ре-шения на базе программного обеспечения Open Source.

Сообщаем вам подробности предстоящего события.

Узнайте о новых возможностяхOpen Source Forum Russia откроет для посетителей мир но-вейших технологий с открытым исходным кодом, совершен-ных бизнес-приложений на платформе Linux и IT-услуг кор-поративного уровня. Главными темами первого российско-го Open Source Forum станут безопасность программныхпродуктов и технологий, возможности и преимущества ис-пользования Linux-решений в государственных учреждени-ях России, а также перспективы использования продуктовOpen Source в корпоративном секторе.

Обсуждайте стратегии с лидерамимировой ИТ-индустрииНа выставке и конференции Open Source Forum Russia бу-дут представлены все лидирующие мировые поставщики IT,активно участвующие в развитии технологий Open Source, –IBM, Novell, Hewlett Packard и др. Руководители высшегозвена глобальных корпораций – Ричард Зайбт (PresidentNovell EMEA) и Адам Джолланс (IBM) – обратятся напря-мую к представителям государственных организаций и ча-стных компаний России. Посетив Open Source Forum Russia,вы получите уникальную возможность услышать выступ-ления выдающихся экспертов по Linux-технологиям, обсу-дить с руководителями мировых корпораций стратегичес-кие тенденции мира Open Source, а также опробовать в дей-ствии и оценить новейшие продукты и решения на базе ПОс открытым исходным кодом.

Специально для выступления в конференции в Москвуприезжает Джон «мэддог» Холл (John maddog Hall), испол-нительный директор Linux International. Господин Холл –один из основателей движения сторонников открытого кода.Его перу принадлежит книга «Linux for Dummies», и он яв-ляется автором многочисленных статей, посвященных спе-цифике открытого кода.

Свое участие подтвердил один из основателей MySQL –Дэвид Аксмарк (David Axmark). Господин Аксмарк более 20лет работает в качестве консультанта в области разработ-ки ПО. В 80-е годы он увлекся идей свободного программ-ного обеспечения, и сейчас он является сторонником биз-нес-модели, основанной на технологиях открытого кода.В MySQL господин Аксмарк работал над стратегией и ас-пектами, касающихся бизнеса и коммерции, установки идокументации.

СЕО компании Perl Ларри Уолл (Larry Wall) также наме-

рен приехать в Россию, чтобы выступить с докладом наOpen Source World Russia. Именно Ларри Уолл в 1987 годусоздал язык программирования Perl. Он удостоился пер-вой награды Free Software Foundations за продвижение ПОна открытом коде. Господин Уолл также известен как соав-тор знаменитой книги «Programming Perl» и создатель про-граммы для чтения новостей rn Usenet.

Свою заинтересованность в участии в конференции под-твердил Рич Боуен (Rich Bowen) СТО компании CooperMcGregor CTO и эксперт по Apache. Он является соавторомкниг «Apache Administrator’s Handbook», «Apache ServerUnleashed». Господин Боуен внес огромный вклад в проект поразвитию Apache, и он регулярно принимает участие в меж-дународных конференциях, посвященных открытому коду.

Развивайте свой бизнесOpen Source Forum Russia соберет лучших IT-профессио-налов, работающих над созданием и продвижением техно-логий с открытым исходным кодом. На сегодня это мероп-риятие – наилучшая в России площадка для завязыванияделовых контактов, установления и развития партнерскихсвязей в сфере продуктов, решений и услуг Open Source.Участвуя в первом российском Open Source Forum, вы оп-ределяете дальнейшие пути влияния Linux и технологийOpen Source на развитие общественных структур, бизнесаи технологий России.

Вход свободный – регистрация обязательна!Подробную информацию и регистрационную форму

можно найти здесь: http://www.opensource-forum.ru.

27-29АПРЕЛЯ

Open Source Forum Russia:все двери открытому кодуоткрыты!

Page 6: 029 Системный Администратор 04 2005
Page 7: 029 Системный Администратор 04 2005

5¹4, àïðåëü 2005

тенденции

Новости проектаOpenNet.ruЗавершен первый конкурс разработчи-ков открытого программного обеспече-ния, проводимый проектом OpenNet.ruсовместно с ассоциацией РУССОФТ,компанией LinuxCenter и журналом «Си-стемный администратор».

Всего на участие в конкурсе былоподано 25 заявок, из которых, путем от-крытого голосования, определились трипобедителя:! 1 место – Глеб Смирнов (525 бал-

лов). Разработчик и коммиттер опе-рационной cистемы FreeBSD.

! 2 место – Андрей Бешков (254 бал-ла). Автор статей и редактор жур-нала «Системный Администратор»,занимается локализацией и про-движением системы Nagios.

! 3 место – Михаил Кашкин (223 бал-ла). Занимается поддержкой и про-движением проектов python, zope,plone и системы Asterisk. Являетсяавтором сайтов: plone.org.ru, xen.ru,cook.python.ru.

Конкурсанты, занявшие призовыеместа, примут бесплатное участие вфоруме Open Source Forum Russia.Также победителям конкурса врученагодовая подписка на журнал «Систем-ный администратор» от редакции из-дания и комплект призов от компанииLinuxCenter. Кроме того, специальныйприз от проекта OpenNet.ru, в виде 3тысяч рублей, вручается КонстантинуОсипову, принимающему активное уча-стие в разработке СУБД MySQL.

В десятке лидеров:! 4 место (201 балл) Максим Коше-

лев (автор Downloader for X);! 5 место (142 балла) Руслан Стари-

цын (WIPFW – Windows-порт пакет-ного фильтра ipfw);

! 6 место (141 балл) Владислав Хар-чев (автор патчей к огромному чис-лу проектов);

! 7 место (140 баллов) Юрий Хныкин(CLIP – Clipper/xBase-совместимыйкомпилятор);

! 8 место (122 балла) Виктор Костро-мин (автор нескольких книг по Linux,поддерживает проект rus-linux.net);

! 9 место (118 баллов) Андрей Мар-келов (статьи и переводы);

! 10 место (102 балла) Андрей Елсу-ков (статьи, патчи, помощь в фору-мах).

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

Максим Чирков

64-битные серверныеплатформы от HPПресс-конференция HP, посвященнаяпрезентации нового поколения серве-ров HP ProLiant ML570 G3 и DL580 G3,состоялась 5 апреля в отеле «Катери-на» в Москве. Главной темой стали 4-хпроцессорные сервера третьего поко-ления на базе новейших 64-разрядныхпроцессоров Intel Xeon MP Cranford(3.66 ГГц и 1 Mб L2) и Potomac (3.33 ГГци 8 Mб L3). В этом секторе рынка HPлидирует (44%) и новые сервера, по-строенные с использованием чипсетаIntel Twin Castle, лишь усиливают от-рыв от конкурентных аналогов. Четы-ре процессора, соединенные с четырь-мя контроллерами памяти двумя ши-нами, могут работать с общей памя-тью, как с однородным пространством.Такое архитектурное решение, кромезначительного увеличения объема опе-ративной памяти, позволяет реализо-вать на ней новые технологии, ранеедоступные только для дисковой памя-ти: зеркалирование, RAID-5 и горячаязамена (Hot Plug RAID memory). В слу-чае отказа происходит определениеповрежденного модуля памяти и опе-ративное восстановление информацииза счет избыточности RAID, что позво-ляет, отключив соответствующий блокпамяти, вынуть его из корпуса и про-извести замену поврежденного моду-ля, естественно, все без разгрузки сер-вера. Добавив к этому RAID6 на дис-ковом массиве вместе с бэкапной ба-тареей на 72 часа для write-back кешаSCSI контроллера получаем превос-ходную платформу для систем высокойстепени готовности, ориентированныхна приложения с интенсивным исполь-зованием памяти. И не удивительно,что на эталонном тесте SAP ® StandardApplication Benchmark сервер DL580 G3обеспечил работу на 270 пользовате-лей больше, чем его предшественниквторого поколения, что обозначилорост производительности на 40%!

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

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

тенденции

6

Уменьшение числалицензий Open SourceОрганизация Open Source Initiative, каки обещала, начала инициативу по сни-жению числа используемых лицензийOpen Source. По словам представителейOSI, группа вводит трехбалльную сис-тему оценки и в качестве «предпочти-тельных» будет называть лишь неболь-шое число открытых лицензий. Какиеиз действующих лицензий удостоятсяэтого статуса, пока еще не решили.Кроме того, OSI приняла три новых ад-министративных постановления, чтопомогут проводить проверку появляю-щихся лицензий для выяснения мерыих бесполезности. Реакция на данноерешение не заставила себя ждать: ком-пания Intel отозвала свою открытую ли-цензию, основанную на BSD License.

Linux-инициативы NovellКомпания не перестает активное выс-тупление на ИТ-сцене со своими Linux-предложениями. Сначала Novell объяв-ляет о том, что до октября 2005 годаагентства государственного сектораГермании с числом пользователей до500 человек получают скидку в разме-ре 60% на все продукты, объявив глав-ной целью акции популяризацию идеймиграции на ОС Linux. Позже совмест-но с HP и Red Hat запускает веб-сайтVersiBa, предназначенный для немец-ких банков и страховых компаний, же-лающих воспользоваться Linux-услуга-ми. На новом портале представленаинформация о ПО, специально разра-ботанном для финансовой области, атакже об офисных и коммуникационныхLinux-предложениях от Novell, Red Hatи других независимых поставщиков.

Mandrakesoft меняетназвание на MandrivaПричин произошедшей смены назва-ния было две: недавнее слияние ком-пании Mandrakesoft с бразильскимLinux-производителем Conectiva, а так-же судебное разбирательство с корпо-рацией Hearst, для завершения кото-рого, как решили, куда проще пойти нанекоторые уступки. Все сервисы и про-дукты Mandrakesoft получили соответ-ствующие наименования: дистрибутивMandriva Linux, клуб пользователейMandriva Club и т. п. Официальный веб-сайт теперь доступен по адресуwww.mandriva.com.

Изменение курсаMozilla FoundationНекоммерческая организация MozillaFoundation объявила о том, что болеене будет обновлять веб-браузер Mozilla,отдав предпочтение другим откры-тым продуктам: Firefox и Thunderbird.По словам разработчиков, несмотря напредварительные редакции Mozilla 1.8,альфа- и бета-релизы которой, как вы-яснилось, были предназначены для те-стирования движка, финальная версия«Seamonkey» так и не увидит свет, аветка 1.7.x станет последней дляMozilla. Однако совсем забывать проMozilla Suite в ближайших планахMozilla Foundation нет: уже 21 мартавыходит очередное обновление – 1.7.6(одновременно с релизом Thunderbird1.0.2), ни о каких окончательных сро-ках прекращения поддержки Mozilla несообщается.

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

HDDlife PRO:профессиональныйподход к мониторингусостояния жесткого дискаКомпания BinarySense объявила о вы-ходе профессиональной версии HDDlife – удобной и функциональной про-граммы, позволяющей пользователюполностью контролировать состояниежесткого диска своего компьютера ипредотвратить таким образом потерюданных. Использование принципиальноновой уникальной технологии JustNow,реализованной в программе HDDlifePro, делает возможным получение ин-формации о состоянии здоровья и про-изводительности жестких дисков ком-пьютера при первом же запуске про-граммы, исключая необходимость дли-тельного предварительного контроля.Функция AnywhereView обеспечиваетвозможность увидеть эти данные из лю-бой программы и приложения: в меню«Мой компьютер», в окне «Открытьфайл» в Microsoft Word и т. д. Програм-ма поддерживает все распространен-ные виды жестких дисков (IDE, SerialATA, SCSI), обладает удобным и краси-вым пользовательским интерфейсом,переведенным на 15 языков, а такжевозможностью настройки проверки порасписанию и рассылки уведомлений опроблемах по e-mail.

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

8

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

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

Automatic Updates (автоматическое обновление). В крупныхкомпьютерных сетях Windows отслеживание и установка об-новлений без специального средства может занимать зна-чительную часть рабочего времени системного админист-ратора, либо увеличивать трафик интернет-соединения.Начиная с 2002 года Microsoft предоставляет бесплатныйпродукт для управления обновлениями в сетях Windows.

WINDOWS SERVER UPDATE SERVICES

СЕРГЕЙ СЕРГЕЕВСЕРГЕЙ СЕРГЕЕВ

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

9¹4, àïðåëü 2005

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

Сначала это был сервер Software Update Services (SUS), и,наконец, 22 марта 2005 года на сайте Microsoft (http://www.microsoft.com/windowsserversystem/updateservices/default.mspx) была опубликована информация о выходе всвет Release Candidate-версии нового продукта – WindowsServer Update Services (WSUS RC). Документация и файлыустановки WSUS RC доступны для свободной загрузки ссайта Microsoft.

Служба WSUS предназначена для централизованногоуправления обновлениями и исправлениями корпоративныхпродуктов Microsoft: Windows XP Professional, Windows 2000,Windows Server 2003, Office XP, Office 2003, SQL Server 2000,SQL Server 2000 Desktop Engine (MSDE) 2000, ExchangeServer 2000 и Exchange Server 2003. Скорее всего, наборподдерживаемых продуктов будет увеличиваться. Это под-тверждается тем фактом, что при первой же синхрониза-ции WSUS с сайтом Microsoft Update список обновляемыхпродуктов в окне настройки параметров синхронизации зна-чительно вырос.

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

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

обходимых обновлений без ручного вмешательства ад-министратора;

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

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

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

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

! применение технологии Background Intelligent TransferService (BITS) 2.0 для более эффективного использова-ния сетевого трафика сервером и клиентом WSUS;

! передача базы обновлений между серверами WSUS че-рез переносные устройства хранения информации;

! специальная утилита WSUSUTIL позволяет управлятьсервером WSUS из командной строки;

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

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

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

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

Интерфейс консоли администрирования WSUS, доступк которой осуществляется по протоколу http через InternetExplorer версии 6.0 или старше, достаточно понятен и удо-бен для работы. Доступ к средствам администрированияиз другого интернет-браузера, а также из операционных си-стем ниже Windows 2000, не поддерживается.

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

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

WSUS состоит из серверной и клиентской частей. Сер-верная часть устанавливается на компьютеры с операци-онными системами Windows 2000 Server или Windows Server2003. Клиентами WSUS могут быть компьютеры под уп-равлением Windows 2000 с установленными Service Pack 3или 4, Windows XP Professional Service Pack 1 или 2, WindowsServer 2003.

Для своей работы WSUS использует сервер баз данныхMS SQL Server 2000. Возможно использование как полно-

Ðèñóíîê 1. Ãëàâíîå îêíî êîíñîëè àäìèíèñòðèðîâàíèÿ WSUS

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

10

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

функциональной версии MS SQL Server 2000, так и бесплат-ной Microsoft SQL Server 2000 Desktop Engine (MSDE) (дос-тупна для загрузки на сайте Microsoft) при установке на ком-пьютер с операционной системой Windows 2000 Server; илиMicrosoft Windows SQL Server 2000 Desktop Engine (WMSDE),которая включена в состав дистрибутива WSUS и доступ-на только при установке на Windows Server 2003. В базеданных хранятся описания обновлений, конфигурация сер-вера WSUS, информация о состоянии обновлений клиент-ских компьютеров.

Клиент WSUS – служба Automatic Updates (автомати-ческое обновление) – работает с сервером по протоколуhttp, поэтому на сервере должна быть установлена и запу-щена служба WWW (World Wide Web) из состава сервераIIS (Internet Information Services).

Администратор сервера WSUS имеет возможность вы-бирать обновления для синхронизации по версии продук-та, типу (классу) обновления (драйверы, критические об-новления, накопительные пакеты обновлений, обновлениясистемы безопасности, и т. д.) и языку. К сожалению, нетвозможности выбирать конкретные классы обновлений иязыки интерфейса в зависимости от продукта. Например,невозможно настроить WSUS так, чтобы синхронизироватьсписок обновлений Windows 2000 только для английскойверсии и в то же время обновлений Windows XP только длярусской версии. При включении в списке языков русского ианглийского будут синхронизироваться обновления на обо-их языках и для Windows 2000, и для Windows XP (есте-ственно, при условии включения загрузки обновлений этихоперационных систем в настройках списка продуктов). Син-хронизацию списка обновлений сервера WSUS с базойMicrosoft Update можно выполнять как в ручном режиме,так и автоматически ежедневно в заданное время. Послеполучения списка доступных обновлений и, как правило,после сбора информации о состоянии обновлений клиент-ских компьютеров («обнаружения»), можно отметить для

загрузки и установки («одобрить», в терминологии WSUS)только необходимые обновления. Есть возможность авто-матизировать операции одобрения обнаружения и установ-ки обновлений, задав соответствующие условия для пра-вил. Другими словами, WSUS можно настроить таким об-разом, что синхронизация с Microsoft Update и установкаобновлений будет выполняться в полностью автоматичес-ком режиме.

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

Протоколирование работы службы WSUS ведется в жур-налах событий, а также в файлах с расширением *.log, и насервере, и на клиенте. Исходя из собственного опыта и со-общений в форумах, можно сделать вывод, что основныепроблемы при внедрении WSUS возникают при подключе-нии клиентов к серверу, установке клиентской части WSUSи необходимых программ для загрузки обновлений. Зачас-тую диагностика и определение источника проблемы вы-зывает затруднение даже у опытных администраторов. Кпримеру, возникали проблемы при подключении компью-тера с операционной системой Windows 2000 ProfessionalSP4 к серверу WSUS. В файле WindowsUpdate.log фикси-ровалась серия ошибок с кодом 0x80244001. Проблему уда-лось решить только с помощью специалистов Microsoft, об-ратившись на сайт Beta News. Она заключалась в непра-вильной настройке компонентов Internet Explorer 5.0 на кли-ентском компьютере. После установки Internet Explorer 6.0ошибка исчезла. Поэтому хотелось бы, чтобы содержаниесообщений WSUS (особенно об ошибках) было более ин-формативным.

Окончательный выход WSUS намечен на конец второгоквартала 2005 года. Согласно информации от Microsoft, дляпользователей WSUS RC будет возможно обновление дофинальной версии. На данный момент WSUS RC доступентолько на двух языках: английском и японском. Окончатель-ная версия продукта будет локализована для всех языков,поддерживаемых серверными и клиентскими операцион-ными системами Windows.

Развертывание службы WSUS в сети организации прак-тически не связано с дополнительными затратами. Этуслужбу можно установить на уже существующий сервер,при этом нужно использовать либо имеющийся сервер базданных MS SQL Server 2000, либо бесплатный MSDE. Служ-бу можно настроить так, что пользователи даже не будутзнать о ее существовании. Несмотря на явные выгоды отвнедрения систем управления обновлениями, многие ад-министраторы все еще не используют их в своих сетях.Думается, что с выходом такого мощного и в то же времяпростого и удобного в администрировании средства, какWSUS, количество организаций, использующих централи-зованные средства управления установкой обновлений,увеличится.

Ðèñóíîê 2. Îäíà èç âîçìîæíûõ ñõåì îðãàíèçàöèè ðàáîòû WSUS

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

11¹4, àïðåëü 2005

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

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

Например, пользователи IBM 360, работающие в средеDOS, должны были так или иначе знать и уметь применятьязык управления заданиями JCL, а если они работали в кон-сольном режиме, то и язык управления работой всей сис-темы. А вот те же пользователи IBM PS/2, работающие всреде OS/2, уже могли ничего не знать про настройки сис-темы и довольствоваться лишь тем, что им предоставляетграфический интерфейс.

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

АЛЕКСЕЙ БАРАБАНОВАЛЕКСЕЙ БАРАБАНОВ

АВТОМАТИЗАЦИЯ MS WINDOWS,ИЛИ AUTOIT КАК МЕЧТА ЭНИКЕЙЩИКАЧАСТЬ 1

Если не работает ксерокс,вызывайте сисадмина.

Это ведь электронный прибор,разве нет?1

1 Здесь и далее, околокомпьютерный фольклор.

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

12

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

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

Интерфейсы

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

де Microsoft Windows превращалась в бесконечную трени-ровку кистевых мышц, поскольку ничем практически их воз-можности не отличались от тех, что были предоставленырядовым пользователям, менялись лишь заголовки и со-держание выпадающих окон. Это сыграло свою положи-тельную роль – манипулятор типа «мышь» за последнее вре-мя из примитивной «каталки» с крыльчатками и обрези-ненным шариком превратился в высокотехнологическое ус-тройство на основе оптического (лазерного) сканера и ос-нащенное радиоканалом для связи с компьютером. Но ясно,что даже если манипулятор «мышь» будет преобразован вимплантант с компьютерным интерфейсом, это все равноне позволит одному системному администратору обслужи-вать одновременно большее число компьютеров, как этоготребует современная IT-индустрия, подчиняющаяся жест-ким рамкам TCO: http://www.telecominfo.ru/?t=2012, табли-ца 2. И рост показателя числа одновременно обслуживае-мых пользовательских компьютеров (Full Time Equivalent –FTE) сдерживался неразвитостью средств автоматизациисистемных работ в ОС, построенных на основе графичес-ких интерфейсов.

Нельзя сказать, что все было ограничено лишь техно-логическими проблемами. Дело в том, что на платформеMS Windows, которая долгое время была безальтернатив-ной для персональных компьютеров, применяются в основ-ном проприетарные программные продукты. А решениепроблемы их массовой установки идет в разрез с требова-ниями соблюсти обязательную процедуру регистрации (ле-гализации, активации) каждой копии программы. Обычнопроцедура регистрации копии обставлена специальнымизащитными протокольными и не всегда техническими дей-ствиями, например, требуется согласиться с лицензией, вве-сти серийный номер с бокса или CD-диска, вставить клю-чевой диск в лоток привода, провести активацию черезИнтернет и многое иное, что взбредет в голову озабочен-ного получением прибыли разработчика. Даже сама ОС MSWindows в ее коробочном воплощении не предназначенадля создания автоматизированных систем установки на ееоснове. В чем смысл автоматического размножения однойкопии, если по маркетинговому замыслу все продаваемыекопии этой системы требуют оригинальной для каждой изних процедуры регистрации. Были, конечно, оставлены ла-зейки и прочие оговорки. Ну не могли же «отцы-основате-ли» этой софтверной «пирамиды» просто низвести весь ин-ститут системных администраторов до положения «эникей-щиков». Поэтому существовали так называемые «корпо-ративные» версии, которые допускали серийную установ-ку, как копирование одной и той же установочной процеду-ры на множество компьютеров. Правда, в отместку там вво-дились иные ограничения, например, на установку обнов-лений. Но даже такую суррогатную свободу автоматизациирутинных операций установки собственной продукции мог-ла позволить далеко не каждая фирма-производитель про-граммного обеспечения. Поэтому еще одна проблема ав-томатизации работ в среде GUI заключена в том, что мно-гие программные продукты не предназначены для автома-тической установки и настройки в силу дизайна, так кактребовали в процессе установки именно «человеческих»действий.

Если сисадмин по телефону говорит вам,какие кнопки надо нажимать, почитайте газету.

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

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

13¹4, àïðåëü 2005

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

Анимация вместо автоматизации

И вот все эти проблемы получили свое решение. Появи-лось средство автоматизации операций в графическойоконной среде, которое имитировало работу человека-опе-ратора, названное AutoIt и предназначенное изначально дляавтоматизации операций установки программ. Сейчас мож-но воспользоваться версией 2.64, загрузив ее с http://www.hiddensoft.com/AutoIt, и версией 3.1.0, доступной поадресу: http://www.autoitscript.com/autoit3/index.php .Эти про-граммы распространяются под открытыми лицензиями. Вер-сия 2.64, написанная Джонатаном Беннетом (JonathanBennet), в некоммерческих проектах может быть использо-вана без ограничений, а в коммерческих необходимо вме-сте с продуктом указывать ссылку на сайт разработчика.Версия 3.1.0, авторство которой принадлежит упомянуто-му Джонатану Беннету вместе с AutoIt Team, уже идет подGNU GPL, что свидетельствует о зрелости подхода и о не-возможности в дальнейшем изъять эту программу из сво-бодного оборота, переведя под какую-нибудь закрытуюлицензию. На обе версии есть, кроме прилагаемого файлаHelp на английском языке, еще и русская версия докумен-тации в формате chm, подготовленная Валерием Ивановым.

Если рассмотреть эту программу отдельно от контекстапредполагаемого применения, то это всего лишь средствоперехвата анализа состояния оконного интерфейса и эму-ляции нужных сообщений якобы от лица оператора. Прак-тически смотрится как демонстрационная мультипликация.Но с точки зрения языковой машины, например, юниксово-го bash, интерпретирующей некоторый скрипт, все действиявыглядят точно так же мультипликативно. Только это нико-му не заметно, если происходит не на экране, а в текстовойконсоли. И тем более что в текстовых интерпретаторах естьвозможность прятать и перенаправлять обрабатываемыепотоки символов. Но можно назвать и полную текстовуюаналогию из мира *nix обсуждаемой здесь программе. Этоизвестное средство expect. Оно позволяет заменить длянекоторой прикладной программы общение с текстовымитерминалами и тем самым автоматизировать работу опе-ратора путем эмуляции процесса его работы. Применяетсяэто обычно для автоматизации работ с интерактивнымисредами, например с ftp. Примечательно, что и expect, иAutoIt имеют в своем составе средство, облегчающее со-здание сценариев путем записи перехваченных реальныхинтерфейсных данных. Конечно, в AutoIt это пока оченьнезрелое ручное средство, которое в модальном окне по-казывает характеристики выбранного элемента графичес-кого интерфейса.

С точки зрения технологии AutoIt всего лишь используетвозможности, заложенные в API графического интерфейса.Того же самого результата можно добиться с помощью VisualBasic или даже C++. Но в том-то и разница, что использо-вание AutoIt позволяет избежать программирования на «тя-желых» языках. Ибо сисадмин не программист, и ему нуж-но не писать программы, а лишь решать стандартные про-блемы автоматизации, возникающие в ходе его работы.

Итак, как же это работает. Такое средство должно иметьвозможность ввести в управляемую им среду все необхо-димые данные, проанализировать ответ и в меру стандар-тных языковых возможностей организовать интерактивноевыполнение описанного процесса. Все! Если интерфейстекстовый, что верно в отношении expect, то такая системадолжна вводить строковые последовательности, приниматьи анализировать ответные строки и в зависимости от ре-зультата и в силу возможностей своего синтаксиса органи-зовывать некоторый алгоритмический процесс. Если интер-фейс графический, то к перечисленному добавляется GUI-специфика. К вводимым данным добавляются управлениеповедением окон (обнаружение, активация, минимизация,закрытие и проч.), закладок и других элементов оконногоинтерфейса, передвижение мыши и нажатия кнопок на ней.Точно так же, к получаемым данным добавляются событияпо созданию, активации и прочим операциям с окнами. Нуа оставшееся всецело определяется дизайном встроенно-го языка. В версии 2.* используется язык с синтаксисомподобным ассемблерному с разделителями в виде запятыхи примитивными управляющими операторами, основанны-ми на условных переходах. В 3-й версии это уже практи-чески полноценный язык программирования с привычны-ми управляющими структурами, включая функции, и какследствие goto из употребления в этом релизе изъят. И таи другая версии позволяют, как интерпретировать опера-торы, записанные в отдельный скриптовой файл, так и со-здавать исполняемую версию на основе runtime-компонен-тов. Но версия 3.* «тяжелее» в полтора раза. Поэтому ис-полняемые файлы на основе 2-й версии имеют размер от40 Кб, а версии 3.* – от 116 Кб. Вероятно, из-за большегочисла встроенных функций. Кроме уже перечисленного вер-сия 3.* имеет встроенные тайм-ауты в операторах ожида-ния, что позволяет решать проблемы «зависаний» неустой-чивых приложений, но в практике автоматизации стандар-тных действий можно с успехом обойтись и без этого. Дру-гими словами, решения, построенные на версии 2.* не ут-ратили актуальности для 90% задач, решаемых с помощьюAutoIt, но релиз 3.* позволяет создавать полноценные при-ложения, если такое нужно. В интернет-ресурсах, посвящен-ных AutoIt есть даже примеры игровых программ.

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

Думаю, теории достаточно. Далее рассмотрим разнообраз-ные примеры реального использования предложенной тех-нологии. Здесь не ставится целью писать большие и изощ-ренные программы. Главное, чтобы это были работоспо-собные и применимые в практике скрипты и программы.Часть из них будет разобрана в тексте, другая просто ука-зана в ссылках и предназначена для самостоятельного изу-чения. Многие из них будут использованы в заключитель-ном комплексном примере создания диска для автомати-ческой установки MS Windows. Начиная с самой простойпредложенные программы будут усложняться постепенно,что не мешает после прочтения всей статьи вернуться к

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

и всех соседских компьютерах.Мы любим работать до 2:30 ночи, исправляя это.

Если вы увидели сообщение «Are you sure?»,нажмите «Yes» как можно быстрее!

Черт побери, если бы вы не были уверены,вы бы не делали этого, не так ли?

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

14

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

началу и переработать рассмотренные программы с исполь-зованием всего арсенала AutoIt.

В качестве первого практического примера рассмотримавтоматизацию установки самого AutoIt. Поскольку мы рас-полагаем сразу двумя работоспособными релизами, 2-м и3-м, то решим задачу автоматической установки AutoIt вер-сии 3 с помощью скрипта для 2-й. Для этого установим AutoItверсии 2 в систему и создадим с помощью текстового ре-дактора Notepad файл setup_autoit3.aut. Расширение «aut»является стандартным для скриптов AutoIt2. Запишем сле-дующую последовательность операторов:

Это очень короткая программка станет основой разра-батываемого скрипта. Все операторы снабжены коммента-риями и совершенно очевидны по содержанию. Но преждечем запускать ее на выполнение загрузим «AutoIt RevealMode» – специальное средство для просмотра информации,скрытой в структурах связанных, с окнами в MS Windows.Затем запустим скрипт и дождемся завершения. Послепоявления сообщения о завершении закроем его нажати-ем на кнопку «ОК» и снова развернем все окна. Должнополучиться так, как показано на рисунке.

Здесь обратите внимание, что в окне AutiIt v2.64 приво-дится весь перечень текстовых строк с активного окна, на-чиная с его заголовка. Именно на эти строки и будет далее«ловиться» установщик в нашем скрипте, и поскольку кноп-ка Next уже выделена как активная, то сразу, как толькоскрипт дождется активности окна с названием «AutoIt v3.1.0.Setup», можно отправлять этому окну Enter, что приведет кнажатию активной кнопки, то есть к переходу на следую-щий экран установщика. Вот текст следующей, более слож-ной фазы разработки:

Для проверки отменим установку и запустим скрипт поновой.

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

Здесь аналогично первому запуску проследим за участ-ками, отмеченными красным. Задача заключается в том, чтонадо «отловить» новое окно и активировать нужное действие.Но окно имеет такое же название, что и предыдущее! Тогдасмотрим в окошке перехватчика, какие еще строковые зна-чения нам доступны. Находим строку «License Agreement».Эта строка как нельзя лучше отражает специфическое зна-чение полученного окна. И поскольку здесь снова нужноедействие сразу стоит по умолчанию, то после обнаруженияэтого окна нужно снова отправить в него Enter. Меняем текстследующим образом:

// óñòàíîâèì ðåæèì äåòåêòèðîâàíèÿ ñêðûòîãî òåêñòà â îêíàõSetTitleMatchMode, 2DetectHiddenText, on// óáåðåì âñå îêíà ñ ýêðàíàWinMinimizeAll// ïîäîæäåì ñåêóíäóSleep, 1000// çàïóñòèì óñòàíîâêó èç òîé æå äèðåêòîðèèRun, autoit-v3-setup.exe// âûâåäåì îêîøêî ñ ñîîáùåíèåìMsgBox, 0, AutoIt, Setup done// çàâåðøåíèåExit

Ðèñóíîê 1

// óñòàíîâèì ðåæèì äåòåêòèðîâàíèÿ ñêðûòîãî òåêñòà â îêíàõSetTitleMatchMode, 2DetectHiddenText, on// óáåðåì âñå îêíà ñ ýêðàíàWinMinimizeAll// ïîäîæäåì ñåêóíäóSleep, 1000// çàïóñòèì óñòàíîâêó èç òîé æå äèðåêòîðèèRun, autoit-v3-setup.exe// äîæäåìñÿ íóæíîãî îêíà è íàæìåì NextWinWaitActive, AutoIt v3.1.0 SetupSend, {ENTER}// âûâåäåì îêîøêî ñ ñîîáùåíèåìMsgBox, 0, AutoIt, Setup done// çàâåðøåíèåExit

// óñòàíîâèì ðåæèì äåòåêòèðîâàíèÿ ñêðûòîãî òåêñòà â îêíàõSetTitleMatchMode, 2DetectHiddenText, on// óáåðåì âñå îêíà ñ ýêðàíàWinMinimizeAll// ïîäîæäåì ñåêóíäóSleep, 1000// çàïóñòèì óñòàíîâêó èç òîé æå äèðåêòîðèèRun, autoit-v3-setup.exe// äîæäåìñÿ íóæíîãî îêíà è íàæìåì NextWinWaitActive, AutoIt v3.1.0 SetupSend, {ENTER}// àíàëîãè÷íî äîæäåìñÿ license agreementWinWaitActive, , License AgreementSend, {ENTER}// âûâåäåì îêîøêî ñ ñîîáùåíèåìMsgBox, 0, AutoIt, Setup done// çàâåðøåíèåExit

Ðèñóíîê 2

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

15¹4, àïðåëü 2005

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

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

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

Эта программа устанавливает AutoIt v3 в автоматичес-ком режиме. Её можно преобразовать в исполняемый, а неинтерпретируемый код. Но предлагаю прогнать ее полнос-тью и далее перейти к работе в AutoIt v3, который как раз ибудет установлен к этому моменту. Прежде всего, восполь-зуемся утилитой перевода тестов из 2-й версии в 3-ю «v2

to v3 Converter». Такой подход позволяет сразу получитьсинтаксически верную программу. Вот результат:

Как видно по тексту, никаких существенных измененийновый синтаксис не несет. Скрипт после конвертации былпомещен в файл setup_autoit3.au3, расширение у которогоимеет стандартное для версии 3 значение. Но программаделает все то же самое. Если преобразовать ее в исполня-емый код с помощью имеющегося в версии 3 компилятора,то после удаления AutiIt v3 из системы его можно снова ус-тановить с помощью новой программы. Это и будет про-веркой работоспособности.

Совершенно таким же способом можно создать сред-ства автоматической установки практически любого про-граммного обеспечения вне зависимости от особенностейиспользованного разработчиками установщика. Конечноже, в реальной работе можно сразу начать создание скриптав среде AutoIt версии 3, и тогда для определения строк, покоторым происходит детектирование нужных окон, надобудет воспользоваться «перехватчиком» окон из версии 3,который называется «AutoIt v3 Active Window Info». Но в ос-тальном последовательность действий будет точно такойже: запускаются приложения, определяются названия оконили тексты внутри них, записываются клавиатурные нажа-тия (например, клавиша ALT как активатор меню) и все этопереводится в скрипты AutoIt. Полученные скрипты, преоб-разованные в исполняемые файлы, можно разместить всоответствующих дистрибутивных директориях под крас-норечивыми названиями auto_setup.exe. И в практическойдеятельности установку очередного 1С клиента можно све-сти к запуску только одной программы. Более того, можнодаже поделиться почетной обязанностью установить 1С стем бухгалтером, которому это нужно. Чего же проще –кликнуть один раз!

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

// óñòàíîâèì ðåæèì äåòåêòèðîâàíèÿ ñêðûòîãî òåêñòà â îêíàõSetTitleMatchMode, 2DetectHiddenText, on// óáåðåì âñå îêíà ñ ýêðàíàWinMinimizeAll// ïîäîæäåì ñåêóíäóSleep, 1000// çàïóñòèì óñòàíîâêó èç òîé æå äèðåêòîðèèRun, autoit-v3-setup.exe// äîæäåìñÿ íóæíîãî îêíà è íàæìåì NextWinWaitActive, AutoIt v3.1.0 SetupSend, {ENTER}// àíàëîãè÷íî äîæäåìñÿ license agreementWinWaitActive, , License AgreementSend, {ENTER}// îêíî ñ âûáîðîì ìåñòà óñòàíîâêèWinWaitActive, , Choose Install LocationSend, {ENTER}// çàâåðøåíèå óñòàíîâêèWinWaitActive, , Click Finish to closeSend, {ENTER}// âûâåäåì îêîøêî ñ ñîîáùåíèåìMsgBox, 0, AutoIt, Setup done// çàâåðøåíèåExit

// V2.64 to V3.0.100 (Version 1.0.6)// Converted with AutoItV2toV3 [Version 1.0.6]// (C) Copyright 2004 J-Paul Mesnage.// óñòàíîâèì ðåæèì äåòåêòèðîâàíèÿ ñêðûòîãî òåêñòà â îêíàõAutoItSetOption ( "WinTitleMatchMode", 2 )AutoItSetOption ( "WinDetectHiddenText", 1 )// óáåðåì âñå îêíà ñ ýêðàíàWinMinimizeAll ( )// ïîäîæäåì ñåêóíäóSleep ( 1000 )// çàïóñòèì óñòàíîâêó èç òîé æå äèðåêòîðèèRun ( 'autoit-v3-setup.exe' )// äîæäåìñÿ íóæíîãî îêíà è íàæìåì NextWinWaitActive ( 'AutoIt v3.1.0 Setup' )Send ( '{ENTER}' )// àíàëîãè÷íî äîæäåìñÿ license agreementWinWaitActive ( '', 'License Agreement' )Send ( '{ENTER}' )// îêíî ñ âûáîðîì ìåñòà óñòàíîâêèWinWaitActive ( '', 'Choose Install Location' )Send ( '{ENTER}' )// çàâåðøåíèå óñòàíîâêèWinWaitActive ( '', 'Click Finish to close' )Send ( '{ENTER}' )// âûâåäåì îêîøêî ñ ñîîáùåíèåì$__msgbox = MsgBox ( 0, 'AutoIt', 'Setup done' )// çàâåðøåíèåExit

Ðèñóíîê 3

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

16

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

В многолетнем споре между приверженцами Linux1 и сто-ронниками Windows первые в качестве одного из аргумен-тов часто утверждают, что большинство задач по управле-нию производимыми компанией Microsoft ОС невозможновыполнить без графического интерфейса, и администра-тор фактически становится его заложником. Что ж, доляистины в этом есть, но целиком согласиться с ним можно,только если забыть (или не знать) о том, что в дополнениек операционным системам «парни из Редмонда» уже дав-но выпускают Resource Kit2, включающие комплект отпеча-танной документации и набор утилит.

Что же такое Windows 2000 Resource Kit? Это семь то-мов документации и установочный CD. После инсталляциипакета, а она необходима, если нужна его полная функцио-нальность3, на жестком диске появляется занимающий по-чти 60 Мб каталог C:\Program Files\Resource Kit. Он содер-жит электронные версии вышеупомянутых семи книг и ещечетырех справочников, руководство и документацию по ути-литам, а также сами утилиты общим числом около трехсот.Выражаясь языком Хрюна Моржова: «Внушает»...

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

ЧУДО-ЮДО RESOURCE KIT

АЛЕКСАНДР ШИБЕНКО

1 Именно Linux, т.к. по наблюдениям знатоки AIX, HP-UX, Solaris и других *nix-подобных систем редко тратят время на участие в подобных

дебатах.2 Правда, за отдельную плату и с определенными лицензионными ограничениями.3 Многие утилиты нормально работают и без инсталляции.

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

17¹4, àïðåëü 2005

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

желательно, а может, даже и необходимо использовать до-полнительный инструментарий вроде Excel или Access.

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

В данном случае из системного журнала (ключ -l system)выбираются события «печать» (ключ -m print) с кодом, соот-ветствующим постановке задания в очередь печати (ключ -e10) и помещаются в текстовый файл pr.txt. Каждая строкафайла соответствует одному заданию. Как видно, здесь при-сутствует и имя пользователя, и название принтера, и коли-чество напечатанных страниц (последнее число в строке).Наиболее простым способом получения требуемого отчетамне представляется написание макроса в Excel. Приводитьего здесь, пожалуй, не стоит. Для умеющего программиро-вать человека сделать это не составит большого труда, ановичку подобную задачу вполне можно рекомендовать вкачестве имеющего прикладное значение практикума.

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

Утилиты now.exe, sleep.exe и robocopy.exe входят в со-став Resource Kit. Now.exe выдает в стандартный вывод те-кущую дату и время. Sleep.exe нужна для того, чтобы под-ключить каталог сервера после того, как запустятся все не-обходимые службы и сервисы. Иначе команда net use мо-жет просто не выполниться. Ну а требуемую величину за-держки можно подобрать опытным путем. И наконец, зер-кальное копирование (ключ /mir) с помощью robocopy.exeсодержимого каталога m:\daily\ в d:\archive\. При этом еслиd:\archive\ содержит каталоги и файлы, не имеющие ана-логов в m:\daily\, они будут удалены. Ключ /s запрещаеткопировать пустые каталоги, а /np подавляет вывод на эк-ран информации о ходе копирования. Ключ /log:c:\log\rc.log,надеюсь, понятен без комментариев.

На самом деле robocopy.exe обладает широкими воз-можностями, включая копирование разрешений NTFS, чтоможет оказаться весьма полезным.

на, кроме синтаксиса, хорошо структурирована, содержитеще и примеры. В зависимости от решаемых задач утили-ты в ней разделены на следующие основные группы:! Утилиты управления компьютером (computer manage-

ment tools). Сюда входят инструменты для работы с ре-естром, для управления сервисами и процессами и дляобработки журналов событий.

! Утилиты для развервертывания системы (deploymenttools). Типичный представитель утилит этой группы – не-безызвестная sysprep.exe.

! Диагностические средства (diagnostic tools). Это несколь-ко утилит по отображению информации о распределе-нии так называемой «кучи»4, snmp-монитор, компиляторMIB и ряд других.

! Утилиты для работы с файлами и дисками (file and disktools). Основные представители этой группы – разнооб-разные средства для копирования.

! Инструментарий для Internet Information Service (IIS tools).Здесь можно найти сканер безопасности, стресс-тестдля веб-сервера и предопределенные шаблоны безо-пасности для его конфигурирования.

! Утилиты управления сетью (network monitor tools). Боль-шая часть утилит этой группы позволяет из команднойстроки управлять пользователями и группами и выпол-нять другие администраторские задачи на локальном иудаленном компьютерах.

! Утилиты оценки производительности (performance tools).Их назначение понятно и без комментариев.

Кроме этих, достаточно представительных групп, суще-ствует еще несколько, объединяющих всего по несколькуутилит:! утилиты отладки (debugging tools);! утилиты рабочего стола (desktop tools);! утилиты для Internet Explorer (IE tools);! инструментарий для сценариев (scripting tools);! утилиты безопасности (security tools).

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

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

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

netsvc /list \\REMOTESERVER

shutdown \\REMOTESERVER /r

dumpel -f pr.txt -l system -m print -e 10

@echo offsleep 60now.exe > c:\log\copy.lognet use m: \\server\backup /user:oper 123if errorlevel 1 echo net use error >> c:\log\copy.logrobocopy.exe m:\daily\ d:\archive\ ↵↵↵↵↵

/log:c:\log\rc.log /np /mir /sif errorlevel 1 echo robocopy error >> c:\log\copy.log

4 Куча – пул оперативной памяти, из которого программы ее запрашивают под динамические переменные.

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

18

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

ALT-N MDAEMON –ПОЧТОВАЯ СИСТЕМАДЛЯ СРЕДНИХ И КРУПНЫХКОМПАНИЙ

РОМАН МАРКОВAlt-N MDaemon – почтовый сервер корпоративного уровнядля ОС семейства Windows. Уже с первых версий данныйпродукт пользовался заслуженной популярностью среди ад-министраторов Windows-систем, благодаря чему постоян-но совершенствовался и дополнялся новыми возможнос-тями. На сегодняшний день MDaemon – это SMTP/POP/IMAPсервер с полным набором возможностей: защита от спама,безопасный доступ к почте через веб-интерфейс при помо-щи обычного браузера, удаленное администрирование, атакже при установленном MDaemon AntiVirus защита вашейсистемы от почтовых вирусов.

MDaemon AntiVirus был разработан Alt-N совместно сKaspersky Labs для обеспечения хорошего уровня встроен-ной защиты для пользователей MDaemon. Он перехватыва-ет, подвергает карантину, исправляет и/или удаляет любоесообщение, в котором найден вирус. Большой набор гибкихправил для Content Filter позволяет производить дополнитель-ный анализ, сортировку и обработку писем. Например, яв-ное запрещение вложений в виде исполняемых файлов по-зволяет максимально защититься от новых вирусов, сигна-туры которых еще не включены в антивирусную базу.

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

Помимо этого с MDaemon интегрируются следующиепродукты от Alt-N:! LDaemon – LDAPv3-сервер (Lightweight Directory Access

Protocol). С LDaemon ваши адресные книги путешеству-ют вместе с вами. LDaemon скачивается отдельно ипредлагается пользователям MDaemon бесплатно.

! MDaemon GroupWare – вместе с MDaemon Pro раскры-вает функции групповой работы Microsoft Outlook, ис-пользуя MDaemon в качестве серверной платформы.Пользователи Outlook могут совместно использоватьпапки Календаря, Задач, Контактов, Заметок и Дневни-ка без применения Microsoft Exchange Server.

! RelayFax – факс-сервер с возможностями OCR и под-держкой TWAIN. Входящие и исходящие факсы марш-рутизируются в соответствии с гибкими правилами имогут включать различные критерии, такие как OCR,Caller-ID или факс-аппарат.

Системные требованияи первоначальная установкаMDaemon не слишком требователен к ресурсам при мини-мальной нагрузке, однако при ее возрастании (увеличениеколичества учетных записей, многочисленные правила сор-тировки, большой поток писем) эти требования резко ме-няются. Прежде всего необходимо обеспечить достаточнобольшой объем оперативной памяти. Именно ее может нехватить при большой нагрузке на почтовый сервер. Произ-водитель (www.altn.com) указывает следующие минималь-ные требования к оборудованию:! Pentium III 500 МГц и выше.! 512 Мб RAM (рекомендуется 1 Гб).! Свободное место на диске для установки – 30 Мб + до-

полнительное место под хранение писем, а также log-файлов.

! Microsoft Windows 95 OSR2/98/ME/XP/NT/2000/2003.! Winsock 2 (для старых версий ОС).! Internet Explorer 4.0 и выше.

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

Многолетний опыт использования почтового сервераMDaemon (начиная с версии 3.xx и до сегодняшней – 7.xx)показал, что он идеально подходит для организаций любогомасштаба – от малого бизнеса до крупной компании. Поэто-му использование этого продукта даже для сети из 5-10 ком-пьютеров оправдано: гибкая система сортировки практичес-ки по любым условиям и в зависимости от этих условий –выполнение разнообразных действий (например, при нали-чии в письме вложения с «запароленным» архивом – отсечьвложение, отправить автоответ, запустить указанную про-грамму, и изменив тему письма, доставить пользователю),наличие веб-интерфейса и другие описанные выше возмож-ности помогают сделать любую почтовую систему безопас-ной и удобной. Причем минимальные системные требова-ния, указанные производителем, являются несколько завы-шенными применительно к объему оперативной памяти.

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

19¹4, àïðåëü 2005

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

Автор статьи использует в качестве почтового сервера набазе MDaemon 7.xx компьютер с объемом оперативной па-мяти 256 Мб. При этом в системе функционирует около 200почтовых ящиков, встроенный антивирус, веб-интерфейс,а также довольно много правил сортировки. Правда, одно-временное использование всех возможностей, дополни-тельных модулей, а также дальнейший рост количествапользователей как раз и увеличит этот лимит до 512 Мб.

Для установки почтового сервера рекомендуется ис-пользовать ОС семейства Windows NT (Windows NT/2000/XP/2003), так как MDaemon, как и любое серверное прило-жение, лучше устанавливать в качестве системной служ-бы. Дистрибутив скачиваем с официального сайта: http://www.altn.com/download.

В этой статье описывается установка и настройка анг-лийской версии MDaemon. Существует локализованная сто-ронней компанией русская версия (www.MDaemon.ru), од-нако чаще всего системные администраторы не доверяют«нефирменным» локализациям, предпочитая оригинальныеверсии от производителя продукта.

Если система будет масштабной и критичной к сбоям,выбираем качественный и надежный носитель, например,RAID-1 из SCSI-дисков. В окне «Registration Information» вво-дим имя приобретенной лицензии и имя компании, а такжерегистрационный ключ. Продукт имеет 30-дневный trial-пе-риод, в течение которого его можно протестировать бес-платно. После окончания срока работы пробной версии не-обходимо будет активировать продукт.

Сразу после установки запустится мастер, при помощикоторого можно ввести первоначальную информацию о по-чтовой системе. В первом окне «What is your domain name»введите имя своего домена (то, что находится справа отсимвола @, не включая сам символ). Например, тестовыйдомен: lagman.spb.ru. Здесь же можно кликнуть по ссылкеи воспользоваться услугами бесплатного сервиса по реги-страции доменов «dns4you». Однако такой способ хороштолько для тестового режима.

Для создания корпоративной почтовой системы реко-мендуется зарегистрировать доменное имя, воспользовав-шись услугами провайдеров. В следующем окне «PleaseSetup your first account» необходимо ввести первую учет-ную запись нашей почтовой системы, которой автомати-чески будут делегированы полные права по конфигуриро-ванию домена, а также сопоставлен alias «Postmaster» какобязательный согласно требованиям RFC. Вводим имя,предпочитаемый вами login (без символа @ и имени доме-на – они будут автоматически добавлены при создании), атакже пароль. Помните, что пароль этой учетной записи дол-жен быть сложным. Убедимся, что флажок «This account isan administrator – full configuration access is granted» уста-новлен и перейдем на следующую страницу мастера. В окне«Please Setup Your DNS» вводим адреса DNS-серверов, пре-доставленных нам провайдером подключения к сети Ин-тернет, либо других доступных DNS-серверов. Флажок «UseWindows DNS-settings» снимаем – такие настройки лучшепрописывать явно.

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

деле Features. Мы выбираем полный функционал – RunMDaemon in «Advanced Mode». В следующем окне будетпредложено установить MDaemon в качестве системнойслужбы. Устанавливаем флажок «Setup MDaemon as asystem service». Оставляем флажок «Start MDaemon» в пос-леднем окне мастера и выбираем «Finish». Сервер должензапуститься. Если по каким-либо причинам этого не про-изошло при первоначальной установке, выберите из меню«Пуск →→→→→ MDaemon» ярлык «Start MDaemon». Если вы ис-пользуете не тестовую, а полноценную версию программы,прежде всего необходимо активировать ваш программныйпродукт. Делается это в меню «Help →→→→→ Activate yoursoftware». Запустится мастер активации. Вам будет пред-ложено активировать автоматически через интернет иливручную, введя код активации. На этом установка завер-шена, и сервер готов к настройке.

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

Меню «Setup →→→→→ Miscellaneous Options». На закладке GUIзадаем параметры запуска сервера MDaemon. Тут все ин-дивидуально и зависит от личных предпочтений. Скажемлишь, что полезно установить опцию «Start MDaemon…» в«In the system tray» и «Create Sessions…» в «In a hiddenwindow». Первая при старте сворачивает MDaemon в сис-темный трей, а вторая задает запуск активных сессий (от-правка и получение почты) в скрытом окне, которое не бу-дет мешать при просмотре логов и настроек. Параметр «Maxnumber of log lines…» задает количество строк, которое бу-дет отображаться в окнах протоколирования сессий передих затиранием. Обращаем внимание на то, что эти пара-метры влияют только на количество отображаемых на эк-ране строк – размер лог-файлов задается в другом меню.Раздел «Composite log windows contains» позволяет вклю-чить/отключить отображение требуемых окон протоколиро-вания. То есть если мы не используем LDAP и IMAP – мож-но смело отключить вывод этих окон (рис. 1).

На закладе Servers оставляем почти все, как есть. В поле«POP/IMAP server always accept connections from IP» устанав-ливаем адрес локальной петли 127.0.0.1 или IP-адрес на-шего сервера. Подключения с этого адреса будут возмож-ны всегда, независимо от параметров защиты MDaemon.Если ваш сервер предоставляет POP3 доступ для клиен-тов с тонкими и нестабильными интернет-каналами, полез-но установить флажок «POP DELE command immediatelyremoves messages from mailbox». Тогда уже полученныеклиентами сообщения будут удаляться немедленно и приобрыве связи получение продолжится с первого еще недоставленного сообщения (в обычном режиме полученныесообщения удаляются только после завершения сессииPOP3, и при обрыве связи доставка начинается с начала,

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

20

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

дублируя уже полученные письма и создавая лишний тра-фик). При необходимости можно установить лимит на объемотсылаемых/получаемых по протоколу SMTP писем. Дляэтого предназначены опции Data Transfer Limits. Крайне ре-комендуется установить значение Max acceptable SMTPmessage size отличным от 0. В противном случае неопыт-ные пользователи будут беспрепятственно отсылать пись-ма любой величины (частый пример – огромные фотогра-фии или видеоролики). Приемлемое значение – от 2500 до10000 Кб. Не рекомендуется устанавливать значение ме-нее 2500 Кб, так как стандартный размер дискеты 1.44 Мбпри пересылке достигает примерного объема 2,2 Мб. Бо-лее 10 Мб также устанавливать не стоит – приучайте пользо-вателей разбивать файлы на части. Даже если ваш почто-вый сервер отправит такое сообщение – не всякий почто-вый сервер его примет. В итоге сообщение вернется к вам,создав никому не нужный входящий трафик. Если передаю-щий клиент поддерживает команду ESMTP SIZE, то соеди-нение будет разорвано сразу. В противном случае MDaemonначнет прием сообщения, и после завершения соединенияотвергнет его доставку адресату. Опция «Kill the connectionif data transmission exceeds» позволяет задать суммарныйобъем данных на сессию, при превышении которого дан-ное соединение будет разорвано (рис. 2).

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

Следующие закладки до «Misc» пропускаем – для нашейнастройки они пока не нужны. На закладке «Misc» проверяеми устанавливаем флажки «Create ‘Everyone Lists’», «Create‘MasterEveryone’ Lists». В предыдущих версиях MDaemon дан-ные опции были включены по умолчанию. Они создают спис-ки рассылки. Everyone@<domain> включает в себя все почто-вые адреса конкретного почтового домена (почтовых доме-нов может быть несколько), а MasterEveryone@<domain> – аб-

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

Флажок «Require strong passwords» предписывает исполь-зовать только сложные пароли (не менее 6 символов, вклю-чающие в себя буквы и цифры в разных регистрах, а такжене содержащие частей названия ящика) к ящикам для пре-дотвращения возможности несанкционированного доступа.Если вы будете предоставлять доступ к почтовому серверуизвне – крайне рекомендуем использовать именно такиепароли, причем увеличить их длину до 8 символов. Мини-мальная длина пароля задается в файле MDaemon.ini(MDaemon\Apps) →→→→→ Секция [Special] →→→→→ MinPasswordLength=XX. Пароли для всех протоколов едины и задаются всвойствах каждой учетной записи (либо, если используетсясквозная аутентификация в домене NT/AD, берутся из соот-ветствующей БД).

Флаг «Periodically check for new MDaemon updates» раз-решает серверу MDaemon самостоятельно проверять на-личие обновлений на сайте производителя. В случае появ-ления новой версии значок в трее будет мигать (рис. 4).

Ðèñóíîê 1

Ðèñóíîê 2

Ðèñóíîê 3

Page 23: 029 Системный Администратор 04 2005

21¹4, àïðåëü 2005

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

Теперь настроим размер и расположение log-файлов.По непонятной причине (ошибка разработчиков или сомни-тельная задумка) независимо от пути установки MDaemonсоздает на диске C: папку MDaemon и в ней подпапку Logs,куда и записывается часть log-файлов. Сразу исправим этуошибку: остановим сервис MDaemon, откроем файл \Apps\MDaemon.ini и заменим значение переменной LogFiles всекции [Directories] на путь установки MDaemon. После это-го перенесем все файлы из папки C:\MDaemon\Logs в пап-ку установки, удалим с диска C: уже ненужный каталог иснова запустим службу. Затем в окне «Setup →→→→→ Logging»настроим необходимые нам параметры.

На закладке «Log Mode» необходимо выбрать вид именlog-файлов (стандартные или основанные на дате/дне неде-ли). Для общего комплексного анализа рекомендуется выс-тавить «Create a standard set of log files». Если необходимоосуществлять поиск записей по дням – лучше воспользовать-ся набором log-файлов с именами, основанными на дняхнедели или дате. То же самое с опциями «Log detailed mail-sessions» (записывать подробный протокол сессий) и «Logsummarized mail sessions» (записывать краткий протокол сес-сий). Если необходимо будет анализировать возможные про-блемы с отправкой/приемом писем по протоколу SMTP –лучше записывать подробный протокол. Это может понадо-биться при рассмотрении жалоб пользователей, связанныхс функционированием системы доставки почты. Если log-файл служит только для краткого анализа успеха/неудачи(например, анализ системой подсчета трафика) – лучшевыбирать краткий формат файлов. Разумеется, что подроб-ное протоколирование требует гораздо большего дисково-го пространства. Опция «Log each service into separate logfile» позволяет разделять протоколы различных службMDaemon по отдельным файлам, что, несомненно, удоб-нее при поиске необходимой информации.

Опции закладки «Maintenance» позволяют задать макси-мальный размер log-файлов, а также настроить архивиро-

вание старых файлов, возраст которых превысил количе-ство дней, задаваемое в поле «Automatically ZIP and archivelog file older than ….. days». При этом следует помнить, чтоданная опция действует, только если на предыдущей зак-ладке выбрана опция «Create a standard set of log files».

На закладке Options отмечаем те службы, протокол ра-боты которых необходимо записывать в log-файлы. Такжеустанавливаем флажки «Always log to screen» и «Log sessionin real time». Первая опция устанавливает одновременныйвывод протоколов, записываемых в log-файлы на экран, авторая – разрешает этот вывод в режиме реального вре-мени, а не постфактум после осуществления операции. Этополезно при анализе и устранении возможных ошибок.

Настройка доменной почтовой системыОпределимя со способом доставки почты. MDaemon – пол-нофункциональный почтовый сервер и имеет различные ме-ханизмы для получения почты, которые при необходимостимогут использоваться одновременно. Первый способ – на-стройка MX-записи с наивысшим приоритетом в DNS-запи-сях вашего домена на внешний IP-адрес сервера MDaemon.Помните, что такой способ требует от вас внимательной на-стройки безопасности почтового сервера. В противном слу-чае вы рискуете предоставить спамерам открытый relay, чтонеизбежно повлечет за собой жалобы вашему провайдеру,а также создаст большой паразитный трафик.

Замечание. Если почтовый сервер, на который установ-лен MDaemon, находится внутри локальной сети и выходит вИнтернет, используя технологию NAT, необходимо органи-зовать проброс портов (Port-Map) с 25-го порта внешнего ин-терфейса сети на внутренний интерфейс почтового серве-ра. Также не забудьте прописать шлюз по умолчанию и DNS-сервера в свойствах TCP/IP-соединения по локальной сети.

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

Ðèñóíîê 4

Ðèñóíîê 5

Page 24: 029 Системный Администратор 04 2005

22

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

но все письма, посланные на ваш почтовый домен (или до-мены, если их несколько). MDaemon будет получать пись-ма с этого ящика по протоколу POP3, сортировать и скла-дывать в папки существующих пользователей. В этом слу-чае при расположении сервера MDaemon на интернет-шлю-зе компании не забудьте о принудительном запрете входя-щих подключений к порту TCP/25 внешнего интерфейса дляпредотвращения попыток несанкционированной рассылкис использованием вашего сервера. В некоторых случаяхпорт TCP/25 требуется открыть, например, если вы разре-шите использовать ваш сервер в качестве SMTP-серверадля обладателей ящика на нем. В этом случае необходимоочень тщательно спланировать безопасность, например,включив обязательную авторизацию SMTP-сессий и задаввсем учетным записям сложные пароли. Mdaemon поддер-живает шифрованные протоколы аутентификации, а так-же STARTTLS, STLS для SMTP, POP3, IMAP-сессий. Поми-мо этого имеется возможность шифровать сессии веб-дос-тупа к почтовым ящикам. Настройку можно произвести вменю Security – SSL/TLS/Certificates.

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

Поддерживается и третий способ получения почты –ETRN. Он объединяет в себе преимущества первого методаи безопасность второго и заключается в том, что провай-дер собирает всю адресованную вам почту в одну очередь,которую и перенаправляет на ваш IP-адрес по протоколуSMTP, когда ваш хост доступен, либо по сигналу от вашегосервера на разбор очереди. В этом случае мы должны бу-дем разрешить входящие подключения на порт TCP/25 толь-ко для Relay-сервера провайдера.

Устанавливаем расписание обмена почтой: «Setup →→→→→Event Scheduling». Для постоянной доставки почты черезопределенный интервал времени устанавливаем флажок«Deliver/collect remote mail at this interval» и передвигаем ука-затель интервала на необходимое нам время. Также уста-навливаем флаг «Deliver remote mail immediately uponreception» для того, чтобы полученные письма сразу достав-лялись пользователю. Если вам необходимо создать другое,более гибкое расписание, то в вашем распоряжении все сред-ства для этого. Снимаем флаг: «Deliver/collect remote mail atthis interval» и вручную настраиваем любое расписание. Есливы используете Dial-Up, то здесь же можно настроить пара-метры подключения и отключения (RAS setup).

Помните, что если почтовый сервер будет получать пись-ма напрямую от отправителей по протоколу SMTP, то пись-ма начнут доставляться сразу после создания домена, по-этому если вы переводите на MDaemon уже существующуювнешнюю систему, сначала необходимо завести учетныезаписи пользователей (почтовые ящики), а только затемпроизводить открытие порта TCP/25 на вход. Однако этоспорное решение, т.к. в данном случае отправителям бу-дут возвращены все письма, которые были посланы ими вмомент перевода MX-записи домена на ваш IP-адрес. Еслиже сначала открыть порт TCP/25, а затем заводить пользо-вателей, то в зависимости от настройки условий доставки

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

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

Произведем настройку нашего почтового домена (PrimaryDomain). Меню «Setup →→→→→ Primary Domain». На закладке«Domain» уже указаны настройки, которые мы ввели во вре-мя установки почтового сервера. При необходимости ихможно изменить. Если используется прямое получение по-чтовым сервером почты по протоколу SMTP (MX-запись со-ответствует нашему внешнему IP-адресу), то в поле «PrimaryDomain IP» указываем именно этот IP-адрес. В противномслучае можно указать либо внутренний IP, либо адрес ло-кальной петли 127.0.0.1.

На закладке «Delivery» указывается способ отправки пи-сем нашим почтовым сервером во внешний мир:! «Always send every outbound email to the server specified

below» – всегда отправлять исходящие сообщения насервер, указанный в поле «Mail server». В поле «Mailserver» указывается SMTP-сервер вашего провайдера.

! «Try direct delivery but send problem emails to the serverspecified below» – пытаться отправить напрямую, а в слу-чае неудачи – через хост, указанный в поле «Mail Server».

! «Always send all outbound email directly to the recipient’smail server» – всегда отправлять почту только напрямуюполучателям.

Закладка Ports позволяет изменить стандартные при-вязки служб MDaemon к портам. В случае если вы поменя-ли какое-либо значение, для вступления изменений в силунеобходимо нажать «Bind to new port values now». В про-тивном случае изменения вступят в силу только после пе-резагрузки службы MDaemon.

В закладке «DNS» находятся данные об используемыхпочтовым сервером DNS-серверах, указанные нами еще наэтапе установки. При необходимости их можно сменить. По-мимо этого можно настроить параметры опроса MX- и A-за-писей, согласно которым будут производиться действия надписьмами в случае получения сообщений об ошибках. В ча-стности, установка флага «Use ‘A’ record IP addresses foundwithin MX record packets» разрешает серверу MDaemon приотсутствии MX-записи для домена попытаться доставитьсообщения по IP-адресу, возвращенному A-записью получа-теля. Более подробно о протоколе SMTP можно прочитать вRFC1891 (для хорошего понимания принципов обмена попочтовым протоколам настойчиво рекомендуется это сде-лать). Установка флага «Immediately return mail when DNS saysdomain does not exists» позволит сразу же возвращать от-правителю письмо, если DNS-запрос имени домена возвра-тил результат «Домен не существует». Это предотвратитпостановку такого письма в очередь системы повтора, что, вобщем-то, является в данном случае бесполезным (исклю-

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

23¹4, àïðåëü 2005

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

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

Раздел «Timers» предоставляет возможность изменитьвеличины тайм-аутов на различные события при соединении.

На закладке «Sessions» рекомендуется настроить пре-дельное количество одновременных сессий различных ти-пов. При медленной исходящей скорости канала рекомен-дуется установить величину «Maximum concurrent SMTPoutbound sessions» значением не более 2-4. В любом слу-чае даже при наличии быстрого канала не стоит злоупот-реблять этим параметром. Приемлемая величина этой пе-ременной для быстрых каналов (512 kbit/s и более) – 10-20.

Параметр «Maximum concurrent SMTP inbound sessions»влияет на максимальное количество одновременно входящихсессий по протоколу SMTP. В случае превышения заданнойвеличины клиенты получат сообщение «Server too busy».

Закладка «Unknown mail» позволяет указать на действие,которое необходимо производить с письмами, адресат кото-рых не опознан. Подразумевается, что доменный адрес в до-ставленном письме соответствует обслуживаемым доменамMDaemon, однако такого пользователя в системе не существу-ет. Имеется возможность возвращать письмо отправителюс комментарием «No such user», а также отправлять копиютакого письма администратору почтового сервера (копия от-правляется как вложение). Возврат письма отправителю воз-можен только при получении почты по протоколу SMTP.

На закладке «Pruning» задаются образцы доменныхквот. Здесь рекомендуется задать значения, отличные от0, так как в противном случае редко проверяемые ящики,на которые приходит большое количество писем, будут за-нимать много места на диске. Это же замечание относитсяк ящикам пользователей, которые бездумно устанавлива-ют в свойствах почтового клиента опцию «Оставлять пись-ма на сервере», не указывая максимальный срок их хране-ния. Разумные сроки удаления неактивных учетных запи-сей и устаревших писем для каждой организации свои.Просто рекомендуем не забывать про наличие этого раз-дела. Письма в Mdaemon хранятся для каждого ящика от-дельно, в папке Users. Каждое письмо представляет собойотдельный файл с расширением *.msg.

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

«Dequeue» – данная закладка служит для настройки по-лучения почты от провайдера по ETRN. Укажите здесь ад-рес, по которому ваш сервер должен посылать сигнал о на-чале сеанса доставки вам почты по протоколу SMTP со сто-роны провайдера.

Если у нас несколько почтовых доменов, то необходимоих сконфигурировать. Заходим в Setup – Secondary Domains,указываем имя для вторичного домена, в поле Ip Addressуказываем IP адрес для этого домена. Если подключение квторичному почтовому домену будет осуществляться с ис-пользованием IP адреса, не совпадающего с IP адресом пер-вичного домена, необходимо указать Bind sockets to this IP

only. При этом создаваемые нами учетные записи пользова-телей уникальны и принадлежат только конкретному доме-ну. То есть при создании новой учетной записи через AccountManager в системе с несколькими доменами нам необходи-мо ввести его Login, а также указать, к какому домену онпринадлежит, выбрав из выпадающего списка требуемый.При импорте пользователей из базы NT/AD необходимо выб-рать, в какой домен будут внесены записи. Если необходи-мо, чтобы один пользователь получал почту с разных доме-нов, необходимо создать соответствующие алиасы.

Если почтовый сервер будет забирать почту у провайде-ра по протоколу POP3 c доменного почтового ящика, то пос-ледним шагом первоначальной настройки MDaemon будетуказание свойств этого ящика (их может быть несколько).Меню «Setup →→→→→ DomainPOP». На закладке Account устанав-ливаем переключатель «Enable DomainPOP mail collectionengine» и вводим адрес POP3-сервера, имя и пароль длядоступа. Если ящиков, с которых будет доставляться почта,несколько (например, при наличии нескольких почтовых до-менов), то можно задать параметры остальных ящиков, на-жав «Extra hosts» и отредактировав текстовый конфигура-ционный файл по указанному в нем же шаблону. После при-нятия изменений MDaemon будет собирать почту с указан-ных ящиков согласно расписанию, созданному нами в меню«Event Scheduling». Можно задать дополнительные парамет-ры, например, оставлять письма на сервере – «Leave a copyof message on host server», не скачивать (и при необходимо-сти удалять прямо с сервера) письма, размер которых боль-ше, чем указанная величина, – «Don’t download messageslarger than [XX] KB (0 = no limit)». При медленном входящемканале полезно установить опцию «Download messagesaccording to size (small messages first)». В этом случае сооб-щения будут скачиваться согласно их размеру – меньшие поразмеру в первую очередь. Это позволит большому количе-ству малых по размеру сообщений быть полученными быст-рее, не заставляя многих получателей страдать из-за одно-го пользователя, которому было послано многомегабайтноеписьмо. На закладке «Foreign mail» обязательно установитеопцию «Do not deliver mail addressed to non-local addresses».При парсинге полученных сообщений в поле TO: могут по-падаться другие, нелокальные для вас адреса. Данная оп-ция запретит пересылать такие письма указанным адреса-там. Она наиболее безопасна с точки зрения защиты от не-санкционированной рассылки с использованием вашего по-чтового сервера.

Заведение учетных записейпользователейУправление учетными записями производится при помощименю Accounts. MDaemon поддерживает импорт учетных за-писей пользователей из домена NT/Active Directory и сквоз-ную аутентификацию пользователей. Для этого выбираемиз меню Accounts – Importing опцию «Import accounts from theNT SAM database». Если имя домена NT/AD не совпадает ссозданным нами, то в открывшемся окне указываем домен,из которого будет производиться импорт, а также имя сер-вера, если оно не было найдено автоматически, и нажима-ем кнопку Refresh. Если учетные записи для импорта не по-явились (либо появились далеко не все – например, только

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

24

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

«Forwarding» – позволяет отсылать копии письма на ука-занные (через запятую) адреса. Установив флаг «Retain alocal copy of forwarded mail», копия письма будет оставать-ся в ящике пользователя.

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

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

Последним действием при запуске системы в действиеявляется проверка запуска минимально необходимых сер-висов MDaemon – POP3, SMTP, Antivirus, DomainPOP. Этоделается в левой части основного окна программы. Еслинужный нам сервис имеет статус «Inactive», дважды кликни-те по нему и проконтролируйте, что статус изменился на«Active».

В следующем номере читайте продолжение статьи проболее тонкую первоначальную настройку MDaemon.

учетные записи администраторов домена), то скорее всегоучетная запись, от имени которой запущена служба MDaemonне имеет привилегии «SE_TCB_NAME» в указанном доме-не. Для выхода из этой ситуации необходимо создать в до-мене учетную запись с минимальными правами доступа,единственной задачей которой будет получение доступа начтение базы учетных записей домена. Затем в свойствахслужбы MDaemon необходимо настроить ее запуск с этимиучетными данными и перезапустить службу (эту настройкуможно произвести в меню «Setup →→→→→ System Service»). Послеэтого перезапускаем процедуру импорта, выделяем требуе-мые учетные записи, указываем способ задания паролей длясоздаваемых пользователей почтового сервера, и подтвер-ждаем выбор кнопкой «Import Selected Account». Не стоитустанавливать опцию «Set account passwords equal to accountnames», так как это выходит за рамки любых требованийбезопасности. Лучше всего установить сквозную аутентифи-кацию в домене (не забыв при этом усилить политику безо-пасности паролей в домене), либо вручную задать единыйсложный пароль и затем вручную генерировать и изменятьпароли для каждой учетной записи. По умолчанию пользо-ватели могут изменять свои пароли двумя способами – че-рез веб-интерфейс и при помощи специально сформирован-ного письма на адрес Mdaemon@domain содержащего в полеписьма адрес электронной почты и пароль (однако паро-ли, которые проверяются через сквозную аутентификациюNT/AD, изменить таким образом не удастся). Если данныеаутентификации совпадают, то тело письма интерпретиру-ется сервером как последовательность инструкций. Болееподробно о них можно узнать из встроенной системы по-мощи. Из соображений безопасности рекомендуется сме-нить стандартные шаблоны прав пользователей, по умол-чанию запретив им изменение собственных настроек – осо-бенно возможность самостоятельной смены пароля, адре-сов пересылки и автоответчика (меню «Accounts →→→→→ AccountManager →→→→→ New Account Default»). В любом случае при пра-вильной политике паролей сменить данные настройки воз-можно, только зная пароль учетной записи. Кстати, из сооб-ражений безопасности тема таких писем не записывается вфайлы и окна протоколирования (рис. 6).

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

«Account» – кроме понятных всем стандартных парамет-ров имеется кнопка «Aliases», нажав на которую можно за-дать для учетной записи так называемые «Алиасы» (допол-нительные почтовые адреса, почта для которых также бу-дет доставляться данному пользователю). То есть для ука-зания множества почтовых адресов, письма с которых дол-жны адресоваться одному пользователю, достаточно со-здать для него алиас. Например, после создания алиаса[email protected] для пользователя [email protected] всеполученные письма, в поле адресата которых будет встре-чаться адрес [email protected], будут доставляться в ящикпользователя [email protected].

Ðèñóíîê 6

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

25¹4, àïðåëü 2005

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

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

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

Предлагаю остановиться на рассмотрении следующейсхемы: Kaspersky Anti-Spam (KAS) + Sendmail.

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

Итак, что такое KAS 2.0 и каковы принципы его работы.Как и большинство ныне действующих фильтров, KAS

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

ма;! добавлять или изменять заголовок.

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

Что нужно, чтобы KAS смог работать:! Операционная система Linux или FreeBSD 4.х, 5.х (тес-

тирование проходило на Red Hat 9.0).! Процессор Intel Pentium III с частотой не менее 500 МГц.! Оперативная память не менее 256 Mб.! Наличие установленных программ wget, bzip2.! Наличие одной из почтовых систем: Sendmail, Postfix,

Exim, Qmail, Communigate Pro.

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

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

KASPERSKY ANTI-SPAM 2.0 + SENDMAIL

ДЕНИС ГОРОДЕЦКИЙ

# rpm -i <èìÿ ïàêåòà>

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

26

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

подразумевает:! создание пользователя и группы mailflt;! установку всех программ, входящих в состав KAS, со-

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

! запуск необходимых программ и сервисов;! создание записи в crontab пользователя mailflt для ав-

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

Затем командой:

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

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

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

Запускаете:

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

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

Для Sendmail скрипт-интегратор запускается командой:

Для интеграции kas-milter с Sendmail в конфигурацион-ном файле /etc/sendmail.cf прописывается:

Подробное описание настройки фильтров в sendmail.cfприведено в документации по Sendmail

На этом будем считать процесс установки законченными перейдем к конфигурированию.

Конфигурационные файлы Kaspersky Anti-Spam находят-ся в каталоге /usr/local/ap-mailfilter/conf/src (далее . CONFSRC)и его подкаталогах.

Непосредственно в CONFSRC находятся файлы с фик-сированными именами:! profiles.xml – список профилей фильтрации;! emails.xml – набор списков e-mail-адресов;! iplists.xml – набор списков IP-адресов;! dnsblacklists.xml – набор списков служб DNS-based RBL;! samples.xml – список пользовательских образцов спа-

мерских писем;! settings.xml – файл дополнительных настроек фильт-

ра.

В каталоге CONFSRC имеются следующие подкаталоги:! CONFSRC/profiles – каталог, содержащий файлы с опи-

саниями профилей;! CONFSRC/emails – каталог, включающий файлы со

списками адресов e-mail;! CONFSRC/iplists – каталог файлов со списками IP-ад-

ресов;! CONFSRC/dnsblacklists – каталог файлов со списками

служб DNSbasedRBL;! CONFSRC/samples – каталог, содержащий файлы с об-

разцами спамерских писем.

Собственно говоря, разработчиками было сделано мно-гое, чтобы упростить жизнь администратора, и все конфи-гурационные файлы после инсталляции, мной, были остав-лены без изменения за исключением blacklist_ip.xml (о неммы поговорим позже) и kas-thhtpd.conf (в данном файле оп-ределены настройки для доступа к конфигурации через веб-интерфейс). Здесь была изменена всего одна строка.

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

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

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

# /usr/local/ap-mailfilter/bin/install-key ↵↵↵↵↵<èìÿ_êëþ÷åâîãî_ôàéëà>

# /usr/local/ap-mailfilter/bin/MTA-config.pl

#/usr/local/ap-mailfilter/bin/sendmail-config.pl

Xfilter1, S=local:/usr/local/ap-mailfilter/run/ ↵↵↵↵↵kasmilter.sock, F=R

O InputMailFilters=kasfi

# document rootdir=/usr/local/ap-mailfilter/wwwuser=mailfltport=2880host=0.0.0.0 # ïî óìîë÷àíèþ çíà÷èòñÿ 127.0.0.1,

# ÷òî îçíà÷àåò äîñòóï ê êîíôèãóðàöèè# ÷åðåç âåá òîëüêî ñ ëîêàëüíîãî õîñòà

pidfile=/usr/local/ap-mailfilter/run/kas-thttpd.pid

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

27¹4, àïðåëü 2005

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

Теперь пришло время остановиться на файле blacklist_ip.xml. Выглядит он примерно вот так:

Значение атрибута mask может быть указано в двухформатах: aaa.bbb.ccc.ddd/nn или aaa.bbb.ccc.ddd (равно-значно aaa.bbb.ccc.ddd/32).

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

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

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

дельным пользователям или группам;! отсутствие балловой оценки (хотя кому-то это покажет-

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

! меньшая загрузка системы.

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

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

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

На выходе данного этапа в письмо добавляются следу-ющие специальные заголовки:! X-SpamTest-Categories – заголовок, содержащий инфор-

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

! X-SpamTest-Status – заголовок, указывающий на окон-чательный статус письма по результатам всех прове-рок: SPAM, Probable Spam, Trusted или Not detected.Данный заголовок используется при последующей об-работке письма персональными профилями. Он можеттакже использоваться для обработки письма почтовымклиентом получателя.

Как мы видим, из персональных профилей активиро-ван тот, который пересылает спамные письма в выделен-ный почтовый ящик (пока это сделано в целях получениястатистической информации, в дальнейшем планируетсяприменить «Archiving/Rejecting Spam»).

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

... <Rule> <Conditions> <HeaderMatch header="X-SpamTest-Status" ↵↵↵↵↵

regexp="SPAM" /> </Conditions> <Actions>

# íåîáõîäèìî çàìåíèòü àäðåñ íà ðåàëüíî ñóùåñòâóþùèé <DoRcptReplaceAll new="[email protected]" /> <!-- Must be changed to a real address --> <DoAccept /> </Actions>

<?xml version="1.0" encoding="koi8-r"?><IPList description="This list contains ip-addressesof spam senders relays. Must be filled up by user."name="Spam Senders' Relays"><IP mask="0.0.0.0"/><IP mask="212.185.0.0/16"/><IP mask="66.112.0.0/17"/><IP mask="62.84.0.0/16"/>...<IP mask="141.156.192.0/18/><IP mask="24.239.0.0/16/></IPList>

# /usr/local/ap-mailfilter/conf/src/profiles.xml<?xml version="1.0" encoding="koi8-r"?><Profiles> <Common> <ProfileRef active="no" file="detect-standard.xml" ↵↵↵↵↵

name="Spam Detection Standard"/> <ProfileRef active="yes" ↵↵↵↵↵

file="detect-standard-no-rbl.xml" ↵↵↵↵↵name="Spam Detection Standard (no RBL &amp; ↵↵↵↵↵DNS check)"/>

<ProfileRef active="no" file="detect-soft.xml" ↵↵↵↵↵name="Spam Detection Soft"/>

<ProfileRef active="no" file="detect-soft-no-rbl.xml" ↵↵↵↵↵name="Spam Detection Soft (no RBL &amp; ↵↵↵↵↵DNS check)"/>

<ProfileRef active="no" file="detect-hard.xml" ↵↵↵↵↵name="Spam Detection Hard"/>

<ProfileRef active="no" file="detect-hard-no-rbl.xml" ↵↵↵↵↵name="Spam Detection Hard (no RBL &amp; ↵↵↵↵↵DNS check)"/>

<ProfileRef active="yes" file="syslog.xml" ↵↵↵↵↵name="Logging"/>

</Common> <Personal> <ProfileRef active="yes" file="rcpt-root.xml" ↵↵↵↵↵

name="root: No Filtering"/> <ProfileRef active="no" file="do-mark-subject.xml" ↵↵↵↵↵

name="Marking Spam - Subject"/> <ProfileRef active="no" file="do-mark-keywords.xml" ↵↵↵↵↵

name="Marking Spam - Keywords"/> <ProfileRef active="yes" file="do-archive.xml" ↵↵↵↵↵

name="Archiving Spam"/> <ProfileRef active="no" ↵↵↵↵↵

file="do-archive-or-reject.xml" ↵↵↵↵↵name="Archiving/Rejecting Spam"/>

</Personal></Profiles>

</Rule>...</Profile>

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

28

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

Вы когда-нибудь слушали интернет-радио? Смотрели люби-мые телепередачи через спутник или Интернет? Или, бытьможет, работали с системой видеонаблюдения через сеть?Если ответ на любой из этих вопросов положительный, мо-жете смело причислять себя к пользователям систем ве-щания! Впрочем, даже если вышеприведенные вещи вамне знакомы, не расстраиваетесь, потому что после прочте-ния этой статьи вы не только узнаете, что это такое и каконо работает, но и получите представление о том, что про-исходит «по ту сторону кулис», а именно – о создании сис-тем вещания. Предметом нашего изучения будет один изнаиболее популярных продуктов организации систем ме-диавещания – Microsoft Windows Media Services 9.

Теоретическое отступлениеА каким оно вообще бывает, это «вещание»? Человек, ко-торый работал с системами вещания на уровне пользова-теля, скажет «аудио и видео», люди, которые общались с

ними с другой стороны, скорее всего, приведут иную клас-сификацию – по способу доставки медиаданных:! системы с одноадресным вещанием (unicast);! системы с многоадресным вещанием (broadcast, multi-

cast).

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

СИСТЕМА ВЕЩАНИЯ НА ОСНОВЕWINDOWS MEDIA SERVICES 9

МИХАИЛ ПЛАТОВ

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

29¹4, àïðåëü 2005

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

ственной. Давайте рассмотрим простой пример: пусть у насесть один аудиопоток с битрейтом 64 Кбит, который необ-ходимо доставлять 100 клиентам одновременно. Для реше-ния этой задачи с использованием режима unicast нам по-требуется канал с пропускной способностью 6,4 Мбит1!

Во втором подходе данная проблема отсутствует, так какпри использовании многоадресного вещания сервер пере-дает данные либо сразу на всю подсеть (режим broadcast),либо на определенную группу многоадресной рассылки (multi-cast group, адрес сети класса D стандарта 802.3 Ethernet).Соответственно в нашем примере для передачи потока 64Кбит от сервера требуется возможность обеспечить каналименно в 64 Кбит, независимо от количества подключен-ных в данный момент клиентов (0 или 10000). Минусом жеявляется то, что сетевая инфраструктура, используемая дляпередачи вещаемых данных, должна быть соответствую-щим образом сконфигурирована для передачи multicast –трафика2. Как правило, это легко достижимо в корпоратив-ных сетях и с трудом реализуемо в масштабах современ-ного Интернета (представьте себе dial-up-пользователя, ко-торый вынужден принимать multicast-поток от радиостан-ции провайдера при каждом соединении). Поэтому истори-чески сложилась следующая ситуация:! multicast используется в корпоративных сетях, при орга-

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

! unicast же используется при передаче в Интернете, а так-же для организации дополнительных сервисов, персо-нифицированных с конкретным абонентом (Video onDemand, Time Shift, и другие сервисы, при которых кли-ент может «управлять» передаваемым ему потоком).

А как же обстоит дело с реальными продуктами? Еслирассматривать системы коммерческого видеовещания, тобезусловными лидерами здесь являются компании Microsoftc продуктом Windows Media Services 9 (вещание в форматеwma и wmv) и Real Media с системой вещания Helix Server(в самой функциональной редакции поддерживает веща-ние в 55 различных форматах). Оба решения поддержива-ют вещание как аудио, так и видеоданных, нацелены на одинсектор рынка и архитектурно очень похожи.

Из «открытых» решений хотелось бы упомянуть о про-екте VideoLAN [1], первоначально ориентированном на орга-низации вещания спутниковых DVB-каналов в локальнуюсеть. На данный момент поддерживается гораздо большеечисло видов источников, все широкоиспользуемые форма-ты видеоданных (MPEG1, MPEG2, MPEG4, divx) и большин-ство распространенных кодеков.

Для поклонников Macintosh и формата QuickTime суще-ствует продукт QuickTime Streaming Server 5 (входит в со-став Mac OS X Server) и его «открытый» брат Darwin StreamingServer (доступный в том числе и для x86), позволяющие рас-

пространять медиаданные в форматах MPEG4 и 3GPP (од-нако, по моим субъективным впечатлениям, функциональ-ность Darwin Streaming Server сильно уступает ближайшимконкурентам от Microsoft и Real Networks).

Среди систем аудиовещания хотелось бы упомянутьNullSoft ShoutCast (продукт, созданный авторами Winamp) иOpen Source-проекты iceCast [2] и SlimServer [3], описаниенастройки которой можно найти в [4]. На этом позвольте за-кончить теоретическое отступление и перейти к описаниюнашего сегодняшнего героя – Windows Media Services 9.

Так вот он какой, серверный олень!Windows Media Services (WMS) – это программный продукт,разработанный и распространяемый корпорацией Microsoftкак средство для организации вещания аудио- и видеоин-формации в локальных сетях, Интернете и беспроводныхсетях. Данный продукт представляет собой набор компо-нентов, работающих под управлением различных версийоперационных систем семейства Windows. Помимо средств,позволяющих быстро и просто организовывать различныевиды вещания аудио- и видеоинформации, в состав WMSтакже входят компоненты, обеспечивающие тесную интег-рацию с Active Directory и IIS, средства оценки и контроляпроизводительности сервера, а также инструменты сборастатистики об общей работе служб. Серверная часть WMSявляется частью ОС Windows 2000 Server и Windows Server20033. Клиентская же часть доступна практически для всехОС от Microsoft (от Windows 9х до Windows Mobile 2005. Кро-ме того, поддержка видео в формате Windows Media при-сутствует в двух наиболее популярных проигрывателях дляLinux – xine [5] и mplayer [6].

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

1 В случае видеовещания требуемая пропускная способность потребуется еще больше.2 Для передачи в нескольких сетях требуется настройка маршрутизаторов. Если же локальная сеть построена на неуправляемых свитчах и

хабах (без маршрутизаторов), то и настраивать ничего не придется.3 Кроме Windows Server 2003 Web Edition.

Ðèñóíîê 1

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

30

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

Итак, в состав Windows Media Services входят следую-щие основные компоненты:! Сервер Windows Media. Этот компонент по праву мож-

но считать «сердцем» системы WMS. Именно он зани-мается организацией самого процесса вещания и отве-чает за «раздачу» медиапотоков конечным пользовате-лям. В качестве источника этих потоков могут высту-пать .wma-, .wmv- и .mp3-файлы (расположенные либолокально на самом сервере, либо на файл-сервере, до-ступном по протоколу SMB), а также потоки, получае-мые с других серверов или непосредственно с кодиров-щика Windows Media. Ядро сервера реализовано в виденабора DCOM-компонентов и системных служб, для уп-равления которыми используется стандартный для про-дуктов Microsoft инструмент – консоль MMC (MicrosoftManagement Console).

! Кодировщик Windows Media. Задачей этого компонентаявляется приведение информации к форме, пригоднойдля передачи сервером Windows Media, или, проще го-воря, перекодирование входных данных (будь то аудио-или видеофайлы, сигнал с TV-тюнера или веб-камеры)в потоковый формат .wma или .wmv. Кодировщик рас-пространяется свободно и может быть загружен с сайтаMicrosoft. В состав этого продукта входят две програм-мы: Windows Media Encoder с графическим интерфей-сом и консольный скрипт WMCmd.vbs на языке VisualBasic Scripting. Кроме того, с сайта Microsoft также мож-но загрузить пакет разработчика (SDK), содержащий всенеобходимое для разработки собственных приложений,использующих интерфейсы кодировщика WindowsMedia. Таким образом, можно добавить возможности ко-дирования в уже существующие приложения.

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

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

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

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

! круглосуточное вещание музыки (локальный аналог ин-тернет-радио);

! multicast-вещание4 в сеть телевизионного канала с TV-тюнера;

! multicast-вещание в сеть картинки с веб-камер, распо-ложенных в интересующих нас местах5;

! доступ к обширному видеоархиву «важных производ-ственных мероприятий»6.

Кроме того, будем считать, что у нас есть «толстый» ка-нал в Интернет и нам не жалко отдавать наружу одновре-менно несколько потоков музыки и пару потоков с «избран-ной» веб-камеры, общим объемом не более 500 Кбит/сек.При реализации будем руководствоваться общей структур-ной схемой Windows Media Services (см. выше). Заметим,что для каждого «внешнего» устройства (TV-тюнера иливеб-камеры) нам, скорее всего, понадобится отдельная ма-шина. Аудиофайлы для радиостанции и файлы видеоархи-ва будем хранить либо на самом медиасервере, либо наудаленном общем ресурсе (хоть бы и на самбе, включен-ной в Windows-домен). Также нам понадобится веб-сервер,в качестве которого мы для простоты будем использоватьIIS6.0, установленный на компьютере с медиасервером (хотявсе то же самое будет великолепно работать практическина любом Linux веб-сервере, включенном в Windows-доменсогласно способу, описанному в [7]).

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

Настройка сервера Windows MediaСервер Windows Media Services поставляется вместе с опе-рационной системой. Для его установки необходимо вос-пользоваться мастером установки и удаления компонентовсистемы: «Start →→→→→ Control Panel →→→→→ Add/Remove Programs/Add/Remove Windows components».

Выберем пункт «Windows Media Services», нажмем на«Details» и выберем компоненты «Windows Media Services»и «Windows Media Services Snap-in». При нажатии кнопки«Next» выбранные компоненты будут установлены на ком-пьютер. После завершения процесса установки в списке ос-насток появится новая запись – «Windows Media Services»,с помощью которой мы и будем управлять нашим серве-ром (рис. 2).

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

Первым делом мы определяем тип точки распростра-нения: В WMS их может быть 2:

4 Для поддержки multicast-вещания нам понадобится Enterprise или Datacenter редакция ОС Windows Server 2003.5 Например, «очередь к окошку кассы в период зарплаты», хроники событий в местном буфете или просто «панорама города» или автосто-

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

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

31¹4, àïðåëü 2005

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

! Точки для «загрузки по требованию». Представляют со-бой инструмент для организации централизованных хра-нилищ медиаданных. Преимуществами таких хранилищявляются централизованный доступ к размещаемым ме-диаресурсам7, возможность создания динамическихplay-листов с навигацией (остановка, пауза, переход кследующему файлу и т. д.) между ними8, легкая интег-рация с различными веб-приложениями, возможностьконтроля доступа к каждому ресурсу и т. д. Работа стакими точками распространения сильно персонифици-рована, поэтому для передачи данных может использо-ваться только режим unicast. В нашем примере мы бу-дем использовать on-demand точки распространения длясоздания маленькой корпоративной видеотеки;

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

Затем мы определяем источник медиаданных. В каче-стве источников могут использоваться:! отдельный медиафайл;! папка с файлами;! play-лист;! cgi-скрипт, возвращающий play-лист;! кодировщик Windows Media Encoder;! другая точка распространения (unicast или multicast).

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

ранения (режим push)9. Выбор того или иного режима оп-ределяется характером кодируемых данных. Так, если ко-дировщик работает постоянно (24/7), то имеет смысл ис-пользовать более легкий в настройке режим pull. Если жекодируемые данные носят периодический характер (не-сколько часов в день), то лучше использовать режим push.В нашем случае можно использовать режим pull для рет-рансляции TV-канала, и режим push для веб-камер.

Итак, создадим on-demand точку распространения с на-званием «library», источником которой будет являться пап-ка «c:\library», содержащая архивные видеозаписи в фор-мате wmv (рис. 4).

Теперь создадим анонс для точки вещания. Для этогоперейдем в раздел «Properties» и в закладке «General» вклю-чим опцию «Enable access to directory content using wildcards».После этого перейдем на закладку «Announce» и нажмемна кнопку «Run Unicast Announcement Wizard». В качествеисточников файлов выберем «All files in the directory», путьподключения оставим без изменений, для местоположения.asx-файла укажем одну из папок, доступную для веб-сер-вера. На завершающем шаге мастера убедимся, что фла-жок «Test files when this wizard finished» отмечен, и нажмем«Finish» (рис. 5).

Если все было сделано правильно, то после нажатия накнопку «Test» запустится Media Player, воспроизводящийplay-лист, состоящий из всех файлов, находящихся в дан-ной папке.

Перейдем к следующему номеру нашей программы –настройке вещания телевизионного канала с TV-тюнера.

7 При этом сами ресурсы физически могут находиться на различных компьютерах.8 Например, тематическая инструкция, разбитая на главы с возможностью перехода между ними.9 Вообще говоря, в оснастке WMS мы не можем создать работающую push-точку вещания (это может сделать только кодировщик). Все, что

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

Ðèñóíîê 2

Ðèñóíîê 3

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

32

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

Для выполнения этого этапа нам понадобится машина10 сTV-тюнером. В моем случае это был AverMedia Model 203 сдрайверами от Ивана Ускова [8].

Первым делом нам нужно установить кодировщикWindows Media Encoder 9. Для этого идем на сайт http://www.microsoft.com, вводим в поле поиска «Windows MediaEncoder 9 download» и неспешно загружаем 10-мегабайт-ный исполняемый файл. После установки и запуска соот-ветствующего ярлыка нас поприветствует очередной мас-тер настройки. Мы собираемся настраивать более чем «жи-

вое» вещание с TV-тюнера, так что выберем наиболее под-ходящий нам шаблон «Broadcast a live event».

С помощью соответствующих кнопок «Configure» на-страиваем параметры TV-тюнера11 и звуковой карты. На-жимаем «Next» и переходим к следующему окну. Здесь мывыбираем режим доставки закодированного потока до сер-вера (pull или push). Выберем pull с портом 2187 и перейдемк следующему шагу – настройке кодеков. Из списка предоп-ределенных шаблонов выберем Live broadcast video и CDQuality Audio для видео и звукового потока соответственно.Разрешение и битрейт оставим по умолчанию – 320x240 и323 Кбит. Для всех остальных шагов оставим стандартныезначения. После завершения мастера кодирования мы уви-дим следующее сообщение:

Вообще говоря, для того чтобы «вещать», не обязатель-но использовать сервер Windows Media. Можно настроитькодировщик на работу в режиме pull и подключать к немуклиентов напрямую. Однако в этом случае о таких вещахкак «отслеживание обращений»,«ограничение пропускнойспособности», «аутентификация с Active Directory», «под-держка multicast» и других возможностях сервера придет-ся забыть. Единственное, что будет нам доступно – возмож-ность запрета/разрешения доступа к потоку кодировщика

10 И хотя технически возможно размещение сервера вещания и кодировщика на одной машине, делать этого не рекомендуется. Дело в том,

что процесс real-time кодирования является достаточно ресурсоемким (так, при реализации описанного ниже примера средняя загрузка

процессора Celeron 2.0GHz составляла 50%), что может создать проблемы для других приложений, работающих на машине с кодировщи-

ком.11 При настройке TV-тюнера удобно использовать следующий прием. Предварительно, перед запуском кодировщика, с помощью идущей в

комплекте с тюнером программы определяем номер нужного канала и его цветовое представление (PAL или SECAM). Полученные цифры

вводим в свойствах драйвера после нажатии кнопки «Configure».

Ðèñóíîê 4

Ðèñóíîê 5

Ðèñóíîê 6

Ðèñóíîê 7

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

33¹4, àïðåëü 2005

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

для конкретных IP-адресов через диалог «Broadcast security»из меню «Tools». Причем даже в нашем случае не лишнимбудет разрешить доступ к кодировщику только со сторонысервера Windows Media. Итак, после успешного заверше-ния мастера перед нами предстанет картинка с TV-тюнера:

Далее нажмем на кнопку «Start Encoding» и перейдем кнастройке сервера. На сервере нам нужно создать broadcastточку распространения с источником Encoder (Pull). В поле«Location of content» нужно ввести имя машины, на кото-рой работает кодировщик в формате: http://ip_адрес:номер_порта. Точка вещания создана, и теперь нужно отредакти-ровать некоторые ее свойства. Для этого перейдем на зак-ладку «Properties». В первую очередь нам нужно включить«WMS Multicast Data Writer» из раздела «Multicast Streaming»(там же указать адрес multicast группы и сетевой интерфейс,с которого будет производиться рассылка). При необходи-мости для данной точки распространения в разделе «Limits»можно задать ограничения на количество одновременно ра-ботающих клиентов и отводимой им пропускной способно-сти. Наигравшись вдоволь с настройками, перейдем к сле-дующему шагу – созданию анонса для multicast точки рас-пространения. Для этого перейдем на уже знакомую намзакладку «Announce» и нажмем на кнопку «Run MulticastAnnouncement Wizard». На первом шаге мастера отметимпункт «Automaticaly create a web page», затем в окне «StreamFormats» добавим источник-кодировщик, точно так же, каки при создании точки распространения (рис. 9).

В диалоге «Save Multicast Announcement Files» выберемместо сохранения файлов (внутри webroot веб-сервера) иперейдем к следующему шагу – диалогу выбора способадоступа к точке вещания. В нашем варианте мы будем об-ращаться к файлам через веб-сервер, поэтому выберемпервый вариант, дополнительно удостоверившись, что имясервера совпадает с тем, по которому будут обращатьсяпользователи. Для остальных вопросов используем стан-дартные ответы, в заключительном окне отметим пункты,отвечающие за активацию точки распространения и ее те-стирование. Если все было сделано правильно, то, как и впервом случае, при нажатии кнопки «Test» напротив «Testannouncement» запустится Media Player, в котором будет по-

казываться картинка с TV-тюнера. Также можно протести-ровать веб-страницу (рис. 10).

В следующей статье мы продолжим изучение Windows MediaServices 9 и подробно рассмотрим следующие моменты: на-стройка параметров авторизации и аутентификации клиен-тов, использование push-режима для кодировщика, unicastrollover, архивирование передаваемых данных, а также по-смотрим, как можно использовать программные интерфей-сы Windows Media Encoder 9 в собственных приложениях.

Литература, ссылки:1. http://videolan.org.2. http://www.icecast.org.3. http://www.slimdevices.com/su_downloads.html.4. Яремчук С. Лейся песня или сервер потокового аудио

своими руками. – Журнал «Системный администратор»,№11, ноябрь 2004 г. – 28-31 с.

5. http://xinehq.de/index.php/features.6. http://mplayerplug-in.sourceforge.net.7. Гребенников Р. Танцуем Самбу. – Журнал «Системный

администратор», №11, ноябрь 2004 г. – 32-38 c.8. http://www.iulabs.com/download/848wdm_iu.zip.

Ðèñóíîê 8

Ðèñóíîê 9

Ðèñóíîê 10

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

34

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

Рассмотрим типичную для небольшой организации конст-рукцию – шлюз в Интернет, работающий под управлениемUNIX или Microsoft Windows, прокси-сервер, веб-сервер сетиИнтранет, почтовый сервер и т. д. Оказывается, число ееэлементов можно несколько сократить, и в соответствии сзолотым правилом инженера увеличить тем самым общуюнадежность системы. Сегодня мы поговорим о делегиро-вании Apache основных функций кэширующего прокси-сер-вера (например, Squid) и даже кое-чего сверх них. В каче-стве базовой ОС будем использовать Linux, хотя многое изсказанного ниже может быть без ограничения общностиприменено и для других платформ.

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

Покончив с теоретическими вопросами, перейдем к тех-ническим деталям. Для реализации задуманного нам по-надобится Apache версии 2.0.53 и выше1 с включеннымиmod_proxy, mod_cache и mod_deflate. В отличие от специа-лизированных решений вроде упомянутого выше Squid,прокси-сервер на базе Apache имеет модульную архитек-туру, все мыслимые и немыслимые функции которой пост-

роены по принципу: общая база + провайдеры. Мы не разубедимся в этом по ходу изложения. Итак, приступим к пер-вой фазе.

Запуск прокси-сервераДля того чтобы Apache мог принимать и обрабатывать про-кси-запросы, необходимо загрузить модуль mod_proxy, вхо-дящий в стандартный комплект поставки и прекрасно до-кументированный. Здесь и далее в этой статье мы не бу-дем дублировать страницы руководства, останавливаясьлишь на нетривиальных моментах. Mod_proxy, как и боль-шая часть других упомянутых в статье модулей, обычно несобирается в стандартной конфигурации Apache, поэтомувам, вероятно, придется заново скомпилировать сервер,указав соответствующие параметры сценарию configure. Заподдержку mod_proxy отвечает опция «--enable-proxy», про-чие же параметры я буду приводить в тексте в скобках пос-ле имени соответствующего модуля.

В соответствии с представленной выше формулой, mod_proxy образует фундамент, на котором работает системаподдержки прокси-запросов. Их реализации, специфичныедля различных протоколов, вынесены в отдельные модули:mod_proxy_http (--enable-proxy-http), mod_proxy_ftp (--enable-proxy-ftp) и mod_proxy_connect (--enable-proxy-connect). Пос-ледний из них необходим для работы с запросами HTTPCONNECT, в частности, защищенными SSL-соединениями.

Прежде чем говорить о настройке mod_proxy, сделаемпару замечаний. Первое – Apache поддерживает два типапрокси-серверов: прямые (forwarding proxy) и обратные(reverse proxy). Нас будут интересовать исключительно пря-мые прокси-сервера, т.е. промежуточные сервисы, переда-ющие запросы от нашего локального клиента к удаленно-му (чужому) серверу. Обратные прокси действуют с точно-стью до наоборот, т.е. передают запросы от удаленного (чу-жого) клиента локальному веб-серверу и применяются восновном для балансировки нагрузки. Второе – прокси-зап-рос не является для Apache чем-то чужеродным. Заглянувв исходные тексты сервера, вы обнаружите, что все клиен-тские запросы, независимо от того, кому они адресованы,описываются одной и той же структурой. Apache помечаетзапросы, предназначенные другим серверам, специальнымфлагом, но не более того. Из этого, к примеру, следует, что

APACHE КАК ПРОКСИ-СЕРВЕРAPACHE КАК ПРОКСИ-СЕРВЕР

ВАЛЕНТИН СИНИЦЫН

1 Более ранние версии имеют ошибки в mod_cache, препятствующие нормальной работе с кэшированными документами.

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

35¹4, àïðåëü 2005

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

в параметрах модуля mod_proxy отсутствует директива дляуказания порта, который следует использовать для приемавходящих соединений2. Apache способен принимать и об-рабатывать прокси-запросы на любом порту, который раз-решен к «прослушиванию» директивой Listen. Впрочем, напрактике зачастую оказывается удобнее провести границумежду локальными и переадресуемыми запросами. Для до-стижения этой цели можно создать специальный виртуаль-ный хост, например, на порту 3128, пользуясь директивойVirtualHost. Подробности ищите в документации к Apache.Дальнейшее изложение неявно предполагает, что вы уженастроили виртуальный хост и размещаете предлагаемыедирективы внутри принадлежащей ему секции httpd.conf(Подсказка для самых нетерпеливых: в конце статьи приве-ден завершенный фрагмент конфигурационного файла,практически пригодный для непосредственного применения).

Чтобы Apache мог принимать прокси-запросы, необхо-димо явным образом разрешить их, используя директиву«ProxyRequests On». Однако не спешите этого делать, непозаботившись о безопасности сетевых соединений! Оп-лачивать мегабайты, загруженные предприимчивыми под-ростками с ProxyHunter в руках – не самое приятное вре-мяпровождение.

Параметры доступа к серверу задаются в секции <Proxy>и, в частности, могут иметь следующий вид:

Здесь реализована простейшая схема контроля досту-па, базирующаяся на IP-адресах клиентов. Во многих слу-чаях ее будет достаточно. Но что делать, если вы хотитеразрешить использование сервера с компьютеров, не име-ющих фиксированного IP-адреса (например, домашнихмашин особо приближенных сотрудников, которые не прочьполучить «городской прокси»)? Для этих целей можно при-менить авторизацию по имени пользователя и паролю. По-скольку директивы контроля доступа, заключенные междутегами <Proxy> и </Proxy> на самом деле обрабатываютсятеми же самыми модулями, что обеспечивают защиту ло-кальных каталогов сервера (ну, не говорил ли я вам, чтоApache практически не отличает прокси-запрос от обычно-го?), вы можете использовать привычную конструкцию:

Естественно, предварительно следует создать файл /some/secret/file при помощи утилиты htpasswd(1) и загрузить со-ответствующие модули (mod_access и/или mod_auth). Принеобходимости оба метода можно комбинировать. Такжебывает полезно пользоваться директивой «Satisfy All|Any»,

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

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

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

Кэшированием данных в Apache заведует модуль mod_cache (--enable-cache). Именно он принимает решение о том,допустимо ли локальное сохранение того или иного объек-та. Непосредственной записью данных на носители зани-маются модули-«провайдеры», из которых нас в первую оче-редь будет интересовать mod_disk_cache (--enable-disk-cache), реализующий хранение кэша на жестком диске.

Отметим, что в Apache 2.0 оба этих модуля (mod_cacheи mod_disk_cache) имеют статус экспериментальных. Си-туация обещает измениться в Apache 2.1, который пока чтопребывает в состоянии альфа-версии.

Чтобы включить кэширование, используйте директиву«CacheEnable disk /», где «disk» – идентификатор модуля-провайдера. Местоположение дискового кэша и его желае-мый объем (в килобайтах) задается соответственно дирек-тивами «CacheRoot <имя каталога>» и «CacheSize <NNN>»,относящимися уже не к mod_cache, а к mod_disk_cache.Apache предпринимает меры к тому, чтобы конфиденци-альные данные никогда не попадали в кэш сервера, одна-ко лишняя безопасность все же не повредит. Я рекомен-дую сделать каталог, в котором хранится кэш, недоступ-ным ни для кого, кроме Apache.

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

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

По умолчанию для них используются следующие значе-ния: CacheDirLevels 2, CacheDirLength 3.

К сожалению, Apache 2.0 не имеет никаких штатныхсредств для управления содержимым кэша. Вы не можетепостепенно удалять старые данные или делать это при пре-

<Proxy *> # Äëÿ âñåõ ïðîêñè-çàïðîñîâ Order deny,allow # Ñïåðâà çàïðåòèòü, ïîòîì ðàçðåøèòü Deny from All # Çàïðåòèòü âñåì Allow from 192.168.0.1/24 # Ðàçðåøèòü äîñòóï èç âíóòðåííåé

# ñåòè îðãàíèçàöèè</Proxy>

<Proxy *> # Äëÿ âñåõ ïðîêñè-çàïðîñîâAuthName �Tresspassers� # «Ïîñòîðîííèì â.»AuthFile /some/secret/file # Èìÿ ôàéëà, ñîäåðæàùåãî

# ðåêâèçèòû ïîëüçîâàòåëåéAuthType Basic # Ìåòîä àâòîðèçàöèè � áàçîâûéRequire valid-user # Ïðîïóñêàòü âñåõ, êòî ïåðå÷èñëåí

# â /some/secret/file</Proxy>

# chown apache:apache /path/to/cache# chmod 0700 /path/to/cache

2 Напомним, что согласно общепринятым соглашениям для этих целей используется порт 3128.

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

36

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

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

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

СжатиеМодуль для сжатия HTTP-документов известен каждомууважающему себя веб-мастеру. Называется он mod_deflate(--enable-deflate), и, к вящей радости замученного бесконеч-ными сборками из исходных текстов читателя, обычно вклю-чен даже в стандартной конфигурации. Его основное пред-назначение – сжимать локальные HMTL-страницы перед от-правкой их пользователю, но, коль скоро Apache «близо-рук» и не делает особых различий между обычным и пере-адресованным запросом, он вполне годится и для после-дних.

После своей загрузки mod_deflate создает фильтр«DEFLATE», который может быть установлен стандартнымобразом, например, при помощи директивы «SetOutputFilterDEFLATE». Руководство к модулю рекомендует поостеречь-ся и отключить сжатие данных для браузеров, которые, не-смотря на заявленную функциональность3, не могут обеспе-чить должный уровень поддержки (например, NetscapeNavigator 4.x может корректно обрабатывать только сжатыеданные типа text/html, а его версии 4.06-4.08 не способныдаже на это), однако применительно к прокси-серверу этоимеет смысл лишь в том случае, когда такие «динозавры»до сих пор имеют хождение в вашей организации. Из другихдиректив, поддерживаемых mod_deflate, следует упомянутьDeflateCompressionLevel, устанавливающую степень сжатияданных (число от 0 до 9). Большее значение этой величиныобеспечивает меньший размер результирующих файлов, ноповышает нагрузку на процессор. Для среднестатистичес-кой системы оптимальным выбором считается 6. Вы може-те не использовать эту директиву, тогда будут иметь местозначения по умолчанию, принятые при сборке системнойбиблиотеки Zlib.

mod_filterКазалось бы, все хорошо. Наш Apache теперь умеет обра-батывать прокси-запросы, хранить их в кэше и даже сжи-

мать перед отправкой. Однако спустя некоторое (обычно –весьма непродолжительное) время обнаруживаются стран-ные артефакты. Архивы почему-то оказываются упакован-ными дважды, что пугает неподготовленных пользователей.И тут же возникают два вековечных русских вопроса: «Ктовиноват?» и «Что делать?»

Благо, за ответом на первый из них далеко ходить ненадо. Как наверняка уже догадался проницательный чита-тель, проблема кроется в излишней «жадности» нашегоmod_deflate, который сжимает все и вся, тогда как браузерготов распаковать лишь вполне определенные типы фай-лов: текст, HTML-страницы, графические изображения...Лежащее на поверхности решение – ограничить списокфайлов, подлежащих динамическому сжатию, по расши-рению (кстати, оно очень хорошо описано в документациик mod_deflate), можно отбросить сразу же. Расширениефайла далеко не всегда соответствует его содержимому(те же архивы иногда называются как-нибудь вроде http://www.some-tricky-company.ru/download/download.pl?id=1234&uid=5678), кроме того, вариантов, подлежащих филь-трации, оказывается чересчур много. На самом деле, нампроще сказать, что должно сжиматься и выкинуть осталь-ное..

Вторая идея – использовать директиву «AddOutputFilterByType DEFLATE <список MIME-типов>» также терпит фи-аско, поскольку она принципиально не способна работатьс прокси-запросами (это редкое исключение, подтвержда-ющее правило). Да и нужные нам шаблоны, типа «text/*»,не говоря уж о более сложных, ей явно не по зубам. Что жеделать?

Решение существует! Это специализированный модульmod_filter, написанный Ником Кью (Nick Kew) и включен-ный в стандартный комплект поставки Apache 2.1, усечен-ная версия которого была портирована автором этих строкобратно в 2.0. В данном разделе речь будет вестись имен-но о ней.

Исходный код модуля доступен по адресу: http://ktf.physics.usu.ru/~val/mod_filter.zip. Чтобы установить его, рас-пакуйте архив во временный каталог на вашем сервере идайте команду:

Основная идея mod_filter состоит в том, чтобы заменитьобычный фильтр так называемым «умным» (smart filter). «Ум-ный» фильтр – это некоторая абстрактная конструкция, со-держащая условия срабатывания и набор так называемыхпровайдеров (опять это слово!), которые, в свою очередь,являются обычными фильтрами. В перспективе подобныйподход может сократить количество дублирующегося кода,встречающегося практически в каждом модуле и дающегоответ на вопрос: «Должны ли мы обработать эту порцию дан-ных?» Впрочем, сейчас нас будут интересовать сугубо прак-тические аспекты.

Условия срабатывания «умного» фильтра могут исполь-зовать самую различную информацию: поля заголовковпрямого запроса (req) и ответа на него (resp), значения внут-

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

apxs -c -i -a mod_filter.c

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

37¹4, àïðåëü 2005

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

ренних переменных Apache, устанавливаемых с помощьюmod_setenvif (env), имена обработчиков (handler), а такжетип передаваемых данных (Content-type).

Для создания «умного» фильтра используется директи-ва «FilterDeclare <имя фильтра>». Подключением отдельныхпровайдеров управляет директива «FilterProvider <имя филь-тра> <имя провайдера> <условие>». Здесь под именем про-вайдера подразумевается название «обычного» фильтра,например, DEFLATE. Завершив настройку «умного» фильт-ра, следует добавить его в «цепочку» командой FilterChain.При обработке поступившего запроса звенья цепочки пос-ледовательно просматриваются до тех пор, пока не будетнайден фильтр, условие срабатывания которого для данно-го конкретного запроса окажется истинным. По умолчаниюдобавление нового «умного фильтра» происходит в конеццепочки, однако это поведение можно подавить, используяспециальные префиксы в директиве FilterChain. Подробнос-ти ищите в документации.

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

Я, например, использую следующую конструкцию:

Знак долара «$» в начале каждого условия обозначаетоперацию поиска по подстроке. Кроме него, доступен по-иск по регулярному выражению (обрамляется символами«/»), а также весь спектр арифметических операций срав-нения и специальное условие «*», которое всегда истинно.Обратите внимание, что мы используем «resp=Content-type»вместо «Content-type». Между этими двумя вариантами су-ществует тонкое различие. В первом случае MIME-тип оп-ределяется по заголовкам, сформированным удаленнымсервером, тогда как в последнем сведения поступают излокальной базы MIME-типов. Некоторые сайты, например,репозитарий SourceForge.net, используют для своих фай-лов двусмысленные имена, что приводит к недопониманию:http://prdownloads.sourceforge.net/project/release-x.y.tar.gz?download на проверку оказывается HTML-страницей, содер-жащей список доступных зеркал для файла release-x.y.tar.gz,поэтому лучше доверить право определения типа содер-жимого удаленному серверу. Уж он-то точно знает, что намотправил.

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

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

Приложение

Пример вызова configure, обеспечивающийподдержку всех необходимых модулей

Фрагмент файла httpd.conf, реализующийописанную в статье систему

FilterProvider Compressor DEFLATE resp=Content-type $text/FilterProvider Compressor DEFLATE resp=Content-type ↵↵↵↵↵

$application/xhtmlFilterProvider Compressor DEFLATE resp=Content-type ↵↵↵↵↵

$application/xml

ñonfigure \--enable-proxy �-enable-proxy-http -�enable-proxy-ftp -�

enable-proxy-connect\--enable-cache �enable-disk-cache\--enable-deflate\--enable-mods-shared=all

...# Ñëóøàòü ïîðò 3128Listen 3128...# Çàãðóçèòü íåîáõîäèìûå ìîäóëèLoadModule cache_module modules/mod_cache.soLoadModule disk_cache_module modules/mod_disk_cache.so...LoadModule deflate_module modules/mod_deflate.so...LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_ftp_module modules/mod_proxy_ftp.soLoadModule proxy_http_module modules/mod_proxy_http.so...LoadModule filter_module modules/mod_filter.so...# Ñîçäàòü âèðòóàëüíûé õîñò íà ïîðòó 3128NameVirtualHost *:3128<VirtualHost *:3128>

# Âêëþ÷èòü ïîääåðæêó ïðîêñè-çàïðîñîâProxyRequests On<Proxy *>

# Îãðàíè÷åíèå äîñòóïà ïî IPOrder deny,allowDeny from allAllow from 192.168.0.1/24# èëè àâòîðèçàöèÿ ïî èìåíè ïîëüçîâàòåëÿ è ïàðîëþAuthName "No trespassers"AuthType BasicAuthUserFile <ôàéë ñ ðåêâèçèòàìè ïîëüçîâàòåëåé>Require valid-user# Åñëè îáå ñõåìû èñïîëüçóþòñÿ ñîâìåñòíî, óêàæèòå çäåñü# All, ÷òîáû çàòðåáîâàòü ðàçðåøåííûé IP-àäðåñ# è ïðàâèëüíûé ïàðîëü Any, ÷òîáû çàòðåáîâàòü# ðàçðåøåííûé IP-àäðåñ èëè ïðàâèëüíûé ïàðîëüSatisfy Any

</Proxy> # Íàñòðîéêè êýøà

CacheEnable disk /CacheRoot <ïóòü ê êàòàëîãó êýøà>CacheSize 51200CacheDirLevels 2CacheDirLength 3# «Óìíûé» ôèëüòð äëÿ äèíàìè÷åñêîãî ñæàòèÿFilterDeclare CompressorFilterProvider Compressor DEFLATE resp=Content-type $text/FilterProvider Compressor DEFLATE resp=Content-type ↵↵↵↵↵$application/xhtml

FilterProvider Compressor DEFLATE resp=Content-type ↵↵↵↵↵$application/xml

FilterChain Compressor</VirtualHost>

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

38

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

Сегодня на рынке виртуальных машин, позволяющих за-пускать на одном компьютере сразу несколько операцион-ных систем, признанным лидером является VMWare. Этодействительно мощный продукт, обладающий понятныминтерфейсом, простой в настройке, разобраться с исполь-зованием которого под силу и новичку. Но есть и некото-рые неудобства. Так как VMWare является коммерческимпродуктом, то придется либо купить лицензионную версию,либо смириться с тем, что лицензия ограничивает пользо-вателя по времени. Довольно часто, особенно во время вы-хода новых версий программы, сайт бывает так перегру-жен, что не сразу удается получить новый ключ. ПродуктMicrosoft Virtual PC, по моему мнению, еще не пользуетсябольшой популярностью хотя бы потому, что не достиг тогоуровня функциональности, который позволит тягаться сVMWare. Свободные же версии виртуальных машин вродеBochs, Qemu и пр. несмотря на свои возможности (в неко-

торых случаях даже превосходящие VMWare), пользуютсяпопулярностью в большей степени или в основном средисторонников UNIX-систем, скорее всего из-за отсутствия по-нятного интерфейса. К тому же Bochs, при всех его досто-инствах, еще и очень медленно работает, поскольку не ис-пользует динамическую трансляцию. Хотя в последнее вре-мя Qemu уже обзавелся вполне понятными оболочками, нобоюсь, что настоящая популярность придет к нему позже.Между тем существует по крайней мере еще один коммер-ческий проект, предлагающий виртуальную машину, и са-мое интересное, что в его разработке участвуют програм-мисты из России.

SerenityVirtual Station 2004 – SVISTA, именно так называ-ется решение, предлагаемое Serenity Systems International –SSI (http://www.serenityvirtual.com/index.php), первый пресс-релиз с упоминанием о ней датируется 1 ноября 2004 года.Разработкой SVISTA занимается компания «Параллели –

СЕРГЕЙ ЯРЕМЧУК

SVISTAТЬ ВСЕХ НАВЕРХ!

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

39¹4, àïðåëü 2005

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

Программная Студия» (http://www.parallels.ru), образован-ная в феврале 2001 года в Москве.

Итак, что умеет SVISTA? В качестве основной операци-онной системы могут использоваться Linux, FreeBSD,Windows, IBM OS/2 и eСomStation. В качестве гостевых опе-рационных систем могут применяться:! OS/2 2.1, OS/2 Warp 3.0, 4.0, 4.5, eComStation 1.0, 1.1, 1.2! MS-DOS, Windows 3.0, 3.1, 3.11! Windows 95! Windows NT 4.0, Windows 2000, Windows XP, Windows

Server 2003! Linux (kernel 2.2, 2.4 и 2.6)! FreeBSD

Конкретные версии и дистрибутивы в официальной ин-формации не названы, и скорее всего здесь особых огра-ничений нет. Я запускал виртуальную машину в ALT Linux2.4 Master, ASPLinux v10, FreeBSD 5.3 и Windows XP SP1 и2 – проблем не заметил. Системные требования также обыч-ные для такого рода продуктов, и принцип один – чем боль-ше, тем лучше. В SVISTA часть кода выполняется на реаль-ном процессоре, минуя виртуальный, что увеличивает бы-стродействие системы. Доскональных испытаний я не про-водил, но на компьютере 1.1 Celeron с 256 ОЗУ, SVISTAработает примерно с такой же скоростью, что и VMWare,но медленнее Qemu. Если в SVISTA и VMWare загрузка вгостевой ОС такого монстра как KDE, происходит минут за15, то в Qemu на это уходит около 10 минут. SVISTA 2004имеет набор инструментов для гостевой OС, например со-вместный буфер обмена, который позволяет сделать рабо-ту более удобной. Версия для Windows специально опти-мизирована для работы с Citrix Metaframe. В качестве при-менения своему продукту разработчики видят в первую оче-редь различные варианты клиент-серверных архитектур(One technology – many environments), когда терминалы «тон-ких клиентов» загружают с сервера необходимую рабочуюсреду. Подробности смотрите в документации на сайте.

Пользователь, запустивший SVISTA, получает в своераспоряжение следующую виртуальную машину:! CPU Pentium II или AMD Duron (в зависимости от марки

процессора на компьютере);! материнская плата, совместимая с Intel i815;! до 512 Мб оперативной памяти (но не больше половины

имеющейся на PC);! VGA и SVGA-совместимая видеокарта с поддержкой

VESA 3.0, что позволяет использовать любые режимывплоть до 1280x1024x256;

! дисковод формата 3.5'' на 1.44 Мб (может быть пред-ставлен как реальным устройством, так и образом);

! виртуальный жесткий диск IDE объемом до 32 Гб, пред-ставленный как образ;

! виртуальный CD-ROM (может быть как реальным уст-ройством, так и iso-образом);

! до 4 последовательных портов (COM);! до 3 параллельных портов (LPT);! виртуальная Ethernet-сетевая карта, совместимая (на

выбор) с RTL8029, NE2000 или NE2000plus, версия дляWindows дополнительно поддерживает виртуальнуюToken-Ring сетевую карту;

! AC97-совместимая звуковая карта;! клавиатура с поддержкой расширенных 104 клавиш;! мышь PS/2 с колесом.

Как видите, SVISTA несколько проигрывает VMWare, нетподдержки SCSI-, USB-устройств (планируется в следую-щей версии), да и сетевая карта всего одна (в VMWare –три). Однако разработчиками заявлено о поддержке нестан-дартного оборудования вплоть до картридеров.

Установка SVISTASVISTA очень проста в установке и настройке. Но для нача-ла необходимо кроме самого дистрибутива, предназначен-ного для конкретной основной системы, получить лицензи-онный ключ. Под UNIX-системы приложение, т.е. оболочка,распространяется по лицензии GPL и доступно в исходныхтекстах, библиотеки и файлы ресурсов являются закрыты-ми. Сам продукт является коммерческим, поэтому у нас естьдва варианта: купить полную лицензию за 99 у.е., либо зап-росить демонстрационный ключ, который позволит исполь-зовать программу без каких-либо ограничений в течение 30дней, если вы не хотите, чтобы работе мешало сообщениеоб использовании нелицензионной версии. Правда, по ис-течении этого срока никто не запрещает повторить всюпроцедуру с самого начала. Здесь все как в VMWare, толь-ко с тем отличием, что в SVISTA необходимо для каждойосновной системы получать ключ отдельно, но зато можнопользоваться одним и тем же почтовым ящиком. В VMWareв получении ключа на e-mail, который уже имеется в базеданных, будет отказано. При использовании в качестве ос-новной системы Linux получаем архив svista-2004-lnx.zipразмером 1.93 Мб.

После распаковки вы найдете ReadMe-файл и два паке-та: SVISTA-2004.1056-Lin.i386.rpm и SVISTA-2004.1056-Lin.tgz.Первый предназначен для дистрибутивов, поддерживаю-щих rpm-пакеты, второй – для всех остальных.

Или для tgz:

После чего запускаем скрипт SVISTA-config:

Далее будет выведен текст лицензии:

Смотрим в указанный файл. Выясняется, что для ком-пиляции (под UNIX-системы часть SVISTA поставляется в

# rpm �i SVISTA-2004.1056-Lin.i386.rpm

# tar xzvf SVISTA-2004.1056-Lin.tgz#./install.sh

# /usr/bin/SVISTA-configConfiguring SVISTA 2004 build 1056

You must read and accept license agreement to run SVISTA 2004

To list by pages use Spacebar key.

Press 'ENTER' to continue...

Do you accept terms of license agreement ? (Y/N) y

Trying to configure SVISTA 2004 drivers...

configure: error: C compiler cannot create executables

Can't configure ! Read "/usr/lib/SVISTA/Doc/INSTALL"

and follow instructions that written there

Page 42: 029 Системный Администратор 04 2005

40

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

исходных текстах) необходимо наличие исходных текстовядра, библиотек QT 3.xx и конечно же, gcc с glibc. Если ка-кого-либо из этих компонентов нет – установите. Теперькомпиляция происходит нормально.

Удалять также просто, вводим «rpm -e SVISTA» или за-пускаем скрипт uninstall.sh. Установка в Windows происхо-дит обычным образом, т.е. запуском исполняемого файла.Дальнейшая работа версий для UNIX и Windows также неотличается, за исключением того, что в Windows интерфейслокализован и пользователю будет легче разобраться с не-понятными терминами и настройками. Исходя из этого, вседальнейшее описание будет относиться к версии для Linux,но если будут различия, о них будет рассказано отдельно.

Запуск виртуальной машиныПосле установки работать от имени суперпользователя ужене обязательно.

Запускаем утилиту:

После чего появляется экран новой виртуальной маши-ны.

Для дальнейшей работы необходимо ввести регистра-ционный номер, зайдя в пункт Help/Registration. Теперь при-ступаем к созданию новой виртуальной машины, выбравменю New. Во вкладке Main (рис. 2) устанавливаются ос-новные параметры виртуальной машины, тип гостевой си-стемы, параметр Boot sequence позволяет выбрать один изтрех типов загрузки:! Floppy, Hard drive, CD-ROM.! Hard drive, Floppy, CD-ROM.! CD-ROM, Hard drive, Floppy.

Если при запуске не будет найдено загрузочное устрой-ство или оно не правильно сконфигурировано, то вы полу-чите предупреждение «No boot device available, press enterto continue». Параметр Memory определяет количество ре-альной оперативной памяти, которое будет выделено вирту-альной машине, установите его в пределах от 4 до 512 Мб,но не более половины размера ОЗУ. Если конфигураторWindows сразу устанавливает предел в половину имеющей-ся памяти (кроме случаев, когда часть ОЗУ отдана встро-енной карте, см. рис. 3), то в Linux его придется контроли-ровать самому. Если переусердствуете, то получите ошиб-ку «System error E4003: Can't map VM memory».

В Options определяются действия, выполняемые пристарте виртуальной машины. Так, «Start immediately afteropening configuration» позволяет запустить виртуальнуюмашину сразу после выбора конфигурационного файла, бездополнительных действий со стороны пользователя.

Опция «Start virtual machine in full screen mode» запуска-ет виртуальную машину в полноэкранном режиме (в негоможно также перейти, нажав кнопку на панели, либо черезсоответствующий пункт меню).

Включив «Show full screen mode startup warning message»,вы будете получать предупреждения о переходе в полноэк-ранный режим.

Опция «Enable acceleration» включена по умолчанию, но

Ðèñóíîê 2

Trying to configure SVISTA 2004 drivers...

Trying to rebuild drivers...

Drivers rebuilt successfully.

Installing drivers...

Starting drivers...

Starting SVISTA 2004 main driver

Starting SVISTA 2004 network driver

Adding adapter eth0 to bridge 0... succeed.

Configuration completed successfully

# SVISTA&

Ðèñóíîê 1

Ðèñóíîê 3

Page 43: 029 Системный Администратор 04 2005

41¹4, àïðåëü 2005

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

шей частью автоматически, для RTL8029 compatible систе-ма сама выбирает IRQ.

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

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

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

для некоторых гостевых систем (Windows NT и 2000), приработе которых возможны сбои, появляется возможностьотключить ускорение.

И наконец, «Enable write-back disk cache» также вклю-чена по умолчанию и разрешает производить запись не сра-зу в образ, а в кеш. Вкладки Floppy drives и IDE drives похо-жи. В них указываются соответствующие устройства (дис-ковод, жесткий диск и CD-ROM), которые будут доступнына виртуальной машине. При этом могут быть указаны какреальные устройства, так и предварительно созданныеобразы. Для создания файл-образа используется кнопка«Create file», при этом задается размер файла (дисковод1.44 Мб по умолчанию имеет расширение .fdd, жесткий дискот 20 до 32768 Мб, расширение hdd). В Windows файл со-здается автоматически, а в Linux его необходимо предва-рительно создать вручную:

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

Флажок «Compress free space» позволяет сэкономить дис-ковое пространство. Так, только что созданный 4-гигабай-товый контейнер занимает всего 100 Кб, но затем расши-ряется по мере заполнения.

Опции «Start floppy disk connected» и «Start CD-ROM diskconnected» автоматически включают устройство при пода-че питания на виртуальный компьютер.

В Windows для создания образов удобно использоватьпрограмму ImageTool.exe, идущую в комплекте.

Следующие две вкладки «Serial ports» и «Parallel ports»открывают доступ к соответствующим портам.

Во вкладке «Sound settings» доступны опции «PC speakersupport enable» и «Sound support enable», активация кото-рых позволяет использовать спикер и виртуальную AC’97-звуковую карту. При использовании в качестве основнойсистемы Windows в каталоге, в который установлен SVISTA,имеется файл tools.fdd, содержащий драйвера AC’97 и се-тевых устройств в основном для OS/2 и Windows NT.

И наконец, вкладка «Network settings» позволяет акти-вировать сетевое устройство (рис. 5). В зависимости от ис-пользуемой гостевой системы будут доступны различныесетевые адаптеры (таб. 1).

И последним шагом настройки является установка port,IRQ и MAC-адреса. Параметр port устанавливается боль-

Ðèñóíîê 5

Òàáëèöà.1 Ñïèñîê ïîääåðæèâàåìûõ ñåòåâûõ àäàïòåðîââ çàâèñèìîñòè îò òèïà ãîñòåâîé ñèñòåìû

# touch /home/sergej/vm/knoppix.hdd

Ðèñóíîê 4

Page 44: 029 Системный Администратор 04 2005

42

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

Bacula – это мощное средство создания и управления ре-зервными копиями данных, а также восстановления инфор-мации при необходимости. Имея модульную архитектуру,Bacula легко масштабируется и может быть использованакак на нескольких, так и на сотнях компьютеров. Кому бу-дет полезен этот инструментарий? Как сказано в докумен-тации, «... если вы используете такие программы, как tar,dump, bru для создания резервных копий, и хотели бы иметьудобное средство для сетевой работы, то Bacula, скорее все-

го, имеет полный набор необходимых вам функций». Что ж,проверим это утверждение разработчиков.

Начнем с описания компонентов, из которых состоит этасистема. Bacula имеет клиент-серверную архитектуру, еесхема представлена ниже (рис. 1).

Взаимодействие служб в BaculaСердцем системы является «центр управления» (Director), вего функции входит хранение заданий, их запуск, ведение

АРХИВИРУЕМ ДАННЫЕ С ПОМОЩЬЮ BACULA

АЛЕКСЕЙ ГРИНЬКО

Page 45: 029 Системный Администратор 04 2005

43¹4, àïðåëü 2005

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

журнала всего происходящего. Эта часть на данный моментреализована только для FreeBSD и Linux. Для хранения жур-налов создания архивных копий и их содержимого исполь-зуется SQL Server (служба хранения каталога). В его ролиможет выступать PostgreSQL, MySQL и SQLite. Созданныеархивные копии передаются в «хранилище» (Storage Server),где они записываются в «тома» (Volume). Тома физическимогут записываться в простейшем случае в файл, но Baculaподдерживает работу с накопителями на магнитной ленте,в том числе и устройства с автоматической сменой кассеты.Если выбран вариант хранения томов в виде файлов, то пос-ле достижения файлом длины 650-700 Мб (CD) или же 4.5 Гб(DVD), целесообразно закончить работу с этим томом и за-писать его на носитель CD/DVD. Еще одним элементом си-стемы является «Служба файлов» (File Daemon). Это клиен-тская часть, которая устанавливается на компьютеры, хра-нящие данные для архивации. Вся прелесть в том, что дан-ная часть реализована для различных платформ: FreeBSD,Linux и Windows. Таким образом, собирать данные для раз-мещения в архив можно вне зависимости от того, какая опе-рационная система установлена на компьютер. Остался ещеодин элемент – «Консоль» (Bacula Console). Он также су-ществует в версиях для различных ОС, его целью являетсясоздание, управление и контроль выполнения архивных ко-пий, а также менеджмент томов и пулов.

Как видно, поместить службу хранения каталогов, хра-нилище и центр управления разумнее всего на одном сер-вере. В FreeBSD есть следующие порты для установки:! /usr/ports/sysutils/bacula-server! /usr/ports/sysutils/bacula-client

Нам понадобятся оба, так как компьютер, на которомбудет запущен центр управления Bacula, тоже будет высту-пать в роли клиента. После установки необходимо настро-ить три конфигурационных файла, находящихся в $PREFIX/etc/: bacula-fd.conf (служба файлов), bacula-dir.conf (центр

управления), bacula-sd.conf (хранилище). Начнем с самогопростого – bacula-fd.conf:

Конфигурационные файлы состоят из объектов (дирек-тив), параметры каждого объекта находятся внутри фигур-ных скобок {}. Здесь приведены следующие объекты: Director(центр управления), FileDaemon (служба файлов) и Messages(канал сообщений). Описанием первого объекта мы разре-шаем центру управления с именем main-dir подключатьсяи передавать задания. Второй объект задаёт параметры ра-боты самой службы файлов. В третьем же задается имяканала сообщений, в который будут передаваться отчеты опроделанной работе, состояние, ошибки.

Для оповещения о ходе работы, поставленных задачахи результатах их выполнения используются каналы сооб-щений. Можно задействовать несколько каналов, к приме-ру, по числу заданий, и отправлять отчеты пользователям,чьи данные были заархивированы. Мы же создадим одинканал для отправки всех сообщений администратору. Так-же по почте будут приходить уведомления о смене кассетыили подключении нового файлового тома, если текущий за-полнен. Для отправки сообщения Bacula использует соб-ственный инструментарий – bsmtp, который может отправ-лять сообщения не только локально, но и на удаленный smtp-сервер.

Следующий конфигурационный файл описывает на-стройки хранилища:

Director { # îïèñàíèå öåíòðà óïðàâëåíèÿ, Name = main-dir # êîòîðîìó ðàçðåøåíî îáðàùàòüñÿ Password = "bacula" # ê ýòîé ñëóæáå ôàéëîâ}FileDaemon { # îïèñàíèå ñëóæáû ôàéëîâ Name = main-fd # èìÿ êëèåíòà FDport = 9102 # èñïîëüçóåìûé ïîðò WorkingDirectory = /var/lib/bacula # ðàáî÷èé êàòàëîã Pid Directory = /var/run # ôàéë ñ íîìåðîì ïðîöåññà}Messages { # îïèñàíèå êàíàëà ñîîáùåíèé Name = Standard # èìÿ êàíàëà director = main-dir = all, !skipped # ãäå îí íàõîäèòñÿ}

Storage { # îïðåäåëåíèå õðàíèëèùà Name = main-sd # èìÿ SDPort = 9103 # èñïîëüçóåìûé ïîðò WorkingDirectory = "/var/lib/bacula" # ðàáî÷èé êàòàëîã Pid Directory = "/var/run" # ôàéë ñ íîìåðîì ïðîöåññà}Director { # îïèñàíèå öåíòðà óïðàâëåíèÿ, Name = main-dir # êîòîðîìó ðàçðåøåíî îáðàùàòüñÿ Password = "bacula" # ê ýòîìó õðàíèëèùó}Messages { # îïèñàíèå êàíàëà ñîîáùåíèé Name = Standard # èìÿ êàíàëà director = main-dir = all, !skipped # ïåðåäàâàòü ñîîáùåíèÿ â öåíòð óïðàâëåíèÿ}Device { # óñòðîéñòâî õðàíåíèÿ òîìîâ Name = FileStorage # èìÿ Media Type = File # òèï íîñèòåëÿ (ôàéëîâûé) Archive Device = /tmp # ïóòü ê óñòðîéñòâó LabelMedia = yes # äàâàòü òîìàì ìåòêè Random Access = Yes # óñòðîéñòâî ñ ïîçèöèîíèðîâàíèåì AutomaticMount = yes # àâòîìàòè÷åñêîå ïîäêëþ÷åíèå òîìà RemovableMedia = no # ÿâëÿåòñÿ ëè ñúåìíûì íîñèòåëåì AlwaysOpen = no # áëîêèðîâêà èçâëå÷åíèÿ íîñèòåëÿ}

Ðèñóíîê 1

Page 46: 029 Системный Администратор 04 2005

44

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

В этом файле описываются следующие объекты: Storage(хранилище), центр управления, имеющий право работать сданным хранилищем, канал сообщений и, наконец, два уст-ройства для архивирования – файловое и накопитель на гиб-кой магнитной ленте (стриммер).

Перед тем как приступить к последнему, самому слож-ному файлу конфигурации, необходимо подготовить служ-бу каталога. Подойдет PostgreSQL, MySQL или SQLite.

Я остановил свой выбор на MySQL, это довольно рас-пространенный SQL-сервер, присутствующий почти в каж-дой UNIX-системе. В комплекте с Bacula есть скрипты дляконфигурирования базы данных: создание пользователя иустановка необходимых прав (grant_mysql_privileges),(create_mysql_database) и таблиц (make_mysql_tables), на-ходящихся в $PREFIX/bacula. Для создания пользователя иназначения ему необходимых прав, лучше использоватьскрипт, поставляемый по умолчанию. Поэтому создаем но-вую базу данных ./create_mysql_database и затем выполня-ем следующее:

Далее запуском скрипта ./make_mysql_tables создаемнеобходимые для работы Bacula таблицы. На этом подго-товка службы каталога завершена и можно приступать кнастройке центра управления.

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

Некоторые директивы нам уже знакомы, но есть и но-вые – описание заданий (Job), набор файлов (FileSet), гра-фик запуска (Schedule). Начнем с описания заданий (Job) ишаблона задания (JobDefs). Задание может быть несколь-ких типов (Type) – архивирование данных (Backup), восста-новление данных (Restore), проверка целостности данных(Verify) и обслуживание каталога (Admin). С первыми дву-

мя вопросов возникнуть не должно. Verify используется дляпроверки, изменялись ли данные с момента последнего ар-хивирования. Тип задания Admin используется для удале-ния устаревших записей из каталога. Задание обязательнодолжно содержать следующие элементы: имя (Name), тип(Type), типы архивирования (только для заданий Backup),какие файлы архивировать (FileSet), с какого клиента (Client),в какое хранилище (Storage), какой пул (Pool – группа то-мов) использовать, приоритет задания (Priority). Целесооб-разно часть этих опций описать в шаблоне задания и со-здавать задания на его основе. В этом случае не нужнокаждый раз указывать одни и те же опции. Если же мы хо-тим использовать значение элемента, отличное от приве-денного в шаблоне, достаточно его переопределить в опи-сании задания. Ниже приведен пример шаблона и описа-ния задания архивирования:

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

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

Job { Name = "BackupCatalog" # èìÿ çàäàíèÿ JobDefs = DefaultJob # èñïîëüçóåìûé øàáëîí FileSet="Catalog" # íàáîð ôàéëîâ # çàïóñêàòü ïî ãðàôèêó, âûïîëíèòü ïåðåä çàäàíèåì è ïîñëå íåãî Schedule = "WeeklyCycleAfterBackup" RunBeforeJob = "/usr/local/etc/bacula/make_catalog_backup ↵↵↵↵↵

-u bacula -pbaculapwd" RunAfterJob = "/usr/local/etc/bacula/ ↵↵↵↵↵

delete_catalog_backup" Write Bootstrap = "/var/lib/bacula/BackupCatalog.bsr" Storage = FileStorage # èñïîëüçóåì ôàéëîâîå õðàíèëèùå Priority = 11 # ïðèîðèòåò}

mysql -u root -pmysql> grant all privileges on bacula.* to bacula@localhost ↵↵↵↵↵

identified by 'baculapwd' with grant option;mysql> flush privileges;

JobDefs {# øàáëîí çàäàíèÿ

Pool = Default # ïóë ñ òîìàìè # îïèñàíèå ïóëîâ äëÿ ðàçíûõ òèïîâ àðõèâèðîâàíèÿ Full Backup Pool = FullBackups Differential Backup Pool = DiffBackups Incremental Backup Pool = IncBackups Name = DefaultJob # èìÿ Type = Backup # òèï çàäàíèÿ Level = Full # òèï àðõèâèðîâàíèÿ Client=main-fd # êëèåíò Storage = File # õðàíèëèùå Messages = Standard # êàíàë ñîîáùåíèé Priority = 10 # ïðèîðèòåò Reschedule On Error = yes # ïîâòîðÿòü ëè ïðè îøèáêå Reschedule Interval = 6h # èíòåðâàë äëÿ ïîâòîðà Reschedule Times = 3 # êîëè÷åñòâî ïîâòîðîâ}Job { # îïèñàíèå çàäàíèÿ Name = "UnixCfg" # èìÿ JobDefs = DefaultJob # èñïîëüçóåìûé øàáëîí FileSet="UnixCfg" # íàáîð ôàéëîâ Storage = File # èñïîëüçóåìîå õðàíèëèùå}

Device { # óñòðîéñòâî õðàíåíèÿ òîìîâ Name = DDS-4 # èìÿ Description = "DDS-4" # îïèñàíèå Media Type = DDS-4 # òèï íîñèòåëÿ (êàññåòà ñòðèììåðà) Archive Device = /dev/nsa1 # ïóñòü ê óñòðîéñòâó AutomaticMount = yes # àâòîìàòè÷åñêîå ïîäêëþ÷åíèå òîìà AlwaysOpen = yes # áëîêèðîâêà èçâëå÷åíèÿ íîñèòå-

ëÿ Offline On Unmount = no # èçâëåêàòü êàññåòó

# ïðè ðàçìîíòèðîâàíèè Hardware End of Medium = no # àïïàðàòíîå îïðåäåëåíèå

# êîíöà êàññåòû BSF at EOM = yes # ñòàâèòü ìåòêó â êîíöå

# (äëÿ FreeBSD) Backward Space Record = no # íàñòðîéêè äëÿ óñòðîéñòâ Fast Forward Space File = no # ñ íåïðîèçâîëüíûì

# ïîçèöèîíèðîâàíèåì TWO EOF = yes # ïîìå÷àòü êîíåö êàññåòû

# äâóìÿ EOF}

Page 47: 029 Системный Администратор 04 2005

45¹4, àïðåëü 2005

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

мом сервере. Если что-то случится со службой каталога,то, имея на руках одни кассеты с архивами, восстановитьданные будет совсем непросто. Поэтому данные записы-ваются в другое хранилище (файловое). Хранить эти фай-лы после их заполнения рекомендуется на другом сервереили на носителях CD/DVD. Кроме того, здесь используютсяновые элементы RunBeforeJob и RunAfterJob и, как ясно изназвания, это скрипты, которые необходимо запустить дои после начала архивирования. Перед запуском заданиясоздается дамп базы, с помощью скрипта make_catalog_backup (входящего в дистрибутив Bacula). Дамп помещает-ся в файл /var/lib/bacula/bacula.sql. Элемент Schedule (гра-фик запуска) показывает, что это задание необходимо вы-полнять периодически. Выбранный график запуска «WeeklyCycleAfterBackup», как будет рассмотренно позже, указы-вает на то, что архивирование будет запускаться ежеднев-но, после выполнения всех основных резервных заданий.Заметим, добились мы этого установкой приоритета нижеобычного. По умолчанию значение приоритета для зада-ния равно 10.

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

Переходим к следующим объектам – описание наборафайлов для архивирования. В задании с именем UnixCfgмы указали, что будем использовать набор файлов UnixCfg.Расшифруем, что мы имели в виду:

Все интуитивно понятно. Описаны два набора файлов –соответственно для двух вышесозданных заданий. Добав-лю только то, что при использовании файлового хранили-ща, а не стриммера, будет полезным добавить вслед за оп-цией «signature=MD5» опцию «compression=GZIP», котораяуказывает на необходимость архивирования файлов передпомещением в том. В случае со стриммером это не имеетсмысла – большинство устройств имеют аппаратную под-держку сжатия.

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

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

Запуск задания в этом режиме осуществляется из кон-соли Bacula.

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

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

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

FileSet { Name = "UnixCfg" # èìÿ íàáîðà ôàéëîâ Include = signature=MD5 { # îïöèè � ïîñ÷èòàòü

# ñóììû MD5 äëÿ ôàéëîâ /etc # àðõèâèðîâàòü êàòàëîã /etc /usr/local/etc # à òàêæå /usr/local/etc } Exclude = { # ôàéëû-èñêëþ÷åíèÿ *.bak # èñêëþ÷èòü èç àðõèâà ôàéëû ïî ìàñêå }}FileSet { Name = "Catalog" Include = signature=MD5 { /var/lib/bacula/bacula.sql }}

Schedule { Name = "WeeklyCycle" Run = Full 1st sun at 1:05 Run = Differential 2nd-5th sun at 1:05 Run = Incremental mon-sat at 1:05}Schedule { Name = "WeeklyCycleAfterBackup" Run = Full sun-sat at 1:10}

Client { Name = main-fd # èìÿ êëèåíòà Address = localhost # åãî àäðåñ, èìÿ DNS FDPort = 9102 # èñïîëüçóåìûé ïîðò Catalog = MyCatalog # èñïîëüçóåìàÿ ñëóæáà êàòàëîãà Password = "bacula" # ïàðîëü äëÿ äîñòóïà File Retention = 30 days # ñðîê õðàíåíèÿ ôàéëîâ

# â àðõèâå Job Retention = 6 months # ñðîê õðàíåíèÿ çàïèñåé

# â êàòàëîãå AutoPrune = yes # óäàëÿòü ñòàðûå çàïèñè è ôàéëû}Catalog { Name = MyCatalog # èìÿ êàòàëîãà # èìÿ SQL-áàçû äàííûõ, ïîëüçîâàòåëü è ïàðîëü dbname = bacula; user = bacula; password = "baculapwd"}

Storage { Name = File # èìÿ õðàíèëèùà Address = localhost # IP-àäðåñ èëè DNS-èìÿ SDPort = 9103 # èñïîëüçóåìûé ïîðò Password = "bacula" # ïàðîëü Device = FileStorage # óñòðîéñòâî (òàêîå æå,

# êàê â bacula-sd.conf) Media Type = File # òèï íîñèòåëÿ (òàêîå æå,

# êàê â bacula-sd.conf)}Storage { Name = DDS-4 # èìÿ õðàíèëèùà Address = localhost # IP-àäðåñ èëè DNS-èìÿ SDPort = 9103 # èñïîëüçóåìûé ïîðò Password = "bacula" # ïàðîëü Device = DDS-4 # óñòðîéñòâî (òàêîå æå,

# êàê â bacula-sd.conf) Media Type = DDS-4 # òèï íîñèòåëÿ (òàêîé æå,

# êàê â bacula-sd.conf)}

Page 48: 029 Системный Администратор 04 2005

46

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

Как видно выше, мы направляем на адрес root@localhostвсе типы сообщений, за исключением пропуска файлов. Всеэти сообщения будут продублированы в файл /var/lib/bacula/log. Пропущенными могут быть файлы, попавшие под маскуисключения в описании набора файлов или в случае инкре-ментального архивирования, если эти файлы со временипоследнего резервирования не изменялись. В консоль Baculaбудут направляться все сообщения, кроме пропущенных пожеланию пользователя файлов (!skipped), а также ошибокпри сохранении файлов (!saved). Если мы не хотим получатьсообщения по почте и записывать отчеты в файл, достаточ-но закомментировать эти строки. Но хоть один из видов уве-домления рекомендуется оставить, иначе не будет видновозникновения ошибок или запроса на смену носителя.

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

Теперь можно проверить правильность созданных кон-фигурационных файлов. Сделать это можно, запустив поочереди каждого из демонов с ключами -t -c /$PREFIX/bacula/bacua-<daemon>.conf:

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

Подробно стоит остановиться на системе информирова-ния о ходе выполнения заданий. Ниже приведено описаниеканала сообщений с именем Standard, в который мы будемпередавать сообщения со всех служб Bacula. Команда опо-вещения о результате выполнения задается с помощьюmailcommand. Для отправки сообщений, не дожидаясь окон-чания задания, используется команда, определенная с по-мощью operatorcommand. Для информативности можно ис-пользовать следующие переменные:! %c – имя клиента;! %d – имя центра управления;! %e – код завершения задания;! %i – номер задания;! %n – имя задания;! %l – тип архивирования;! %r – получатель;! %t – тип задания.

Запись, определяющая передачу сообщений, можетиметь два формата:

В первом варианте в качестве <путь> может быть стан-дартный взвод (stdout), стандартный поток ошибок (stderr)или консоль Bacula (console). При использовании второготипа формата путь может принимать следующие значения:! центр управления (director);! файл (file);! добавление в существующий файл (append);! системный лог (syslog);! сообщение по почте (mail);! сообщение по почте при ошибке (mail on error);! немедленное сообщение (operator).

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

Bacula имеет следующие типы сообщений:! информационное (info);! предупреждение (warning);! ошибка (error);! критическая ошибка (fatal);! остановка службы (terminate);! сохранение без ошибок(saved);! файл не сохранен (notsaved);! необходимо подключение нового тома (mount);! файл восстановлен (restored);! все типы (all).

Если перед типом сообщения указать модификатор «!»,то это будет означать, что данный тип сообщений включатьне нужно. Исключение определенных сообщений исполь-зуется совместно с типом «all».

Pool { Name = Default # èìÿ òîìà Pool Type = Backup # òèï ïóëà Recycle = yes # ñòèðàòü ëè ïîìå÷åííûå

# íà óäàëåíèå òîìà AutoPrune = yes # ïîìå÷àòü íà óäàëåíèå ñòàðûå òîìà Volume Retention = 3m # ñðîê õðàíåíèÿ òîìà 3 ìåñÿöà LabelFormat = "File-" # ôîðìàò ìàðêèðîâêè òîìà}

bacula-fd -t -c bacula-fd.confbacula-sd -t -c bacula-sd.confbacula-dir -t -c bacula-dir.con

<ïóòü> = <òèï ñîîáùåíèé1>, <òèï ñîîáùåíèé2>,...<ïóòü> = <àäðåñàò> = <òèï ñîîáùåíèé1>, <òèï ñîîáùåíèé2>,...

Messages { Name = Standard # èìÿ êàíàëà ñîîáùåíèé# êîìàíäà îòïðàâêè îò÷åòà

mailcommand = "bsmtp -h localhost \"\(Bacula\) %r\" ↵↵↵↵↵-s \"Bacula: %t %e of %c %l\" %r"

# êîìàíäà îòïðàâêè çàïðîñà ñìåíû íîñèòåëÿ operatorcommand = "bsmtp -h localhost \"\(Bacula\) %r\" ↵↵↵↵↵

-s \"Bacula: Intervention needed for %j\" %r"# îòïðàâëÿòü ïî ïî÷òå âñå òèïû ñîîáùåíèé, çà èñêëþ÷åíèåì# ïðîïóùåííûõ ôàéëîâ mail = root@localhost = all, !skipped# àäðåñ îïåðàòîðà ñìåíû íîñèòåëÿ operator = root@localhost = mount# ïðîäóáëèðîâàòü âñå òèïû ñîîáùåíèé â êîíñîëü Bacula,# çà èñêëþ÷åíèåì ïðîïóùåííûõ è íåñîõðàíåííûõ ôàéëîâ console = all, !skipped, !saved# çàïèñûâàòü ñîîáùåíèÿ â ôàéë append = "/var/lib/bacula/log" = all, !skipped}

Page 49: 029 Системный Администратор 04 2005
Page 50: 029 Системный Администратор 04 2005

48

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

Устав бороться дома с несогласным стабильно работать мар-шрутизатором DLink 624+, я наконец решил поменять этонедорогое, но проблемное устройство на что-нибудь болеенадежное.

Необходимо было выполнение следующих типичных длядома или небольшого офиса функций:! подключение до пяти сетевых устройств (реально у меня

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

! развитый брандмауэр и сетевая трансляция адресов(NAT);

! DHCP-сервер;! поддержка протокола Point-to-Point Protocol over Ethernet

(PPPoE), по которому осуществлялось подключение кпровайдеру;

! надежность и возможность мониторинга состояния мар-шрутизатора, которой так не хватало в DLink 624+.

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

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

АНДРЕЙ МАРКЕЛОВ

БАЗОВАЯ НАСТРОЙКА МАРШРУТИЗАТОРА CISCOНАЧАЛЬНОГО УРОВНЯ

Page 51: 029 Системный Администратор 04 2005

49¹4, àïðåëü 2005

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

точкой для самостоятельного конфигурирования домашней/офисной «кошки» UNIX- или Windows-администратором,ранее не работавшим с оборудованием Cisco.

ПодключениеДля первоначальной настройки маршрутизатора необходи-мо подключиться к консольному порту на задней панелиустройства. Консольный порт с разъемом RJ-45 представ-ляет собой обыкновенный асинхронный последовательныйпорт TIA/EIA-232. Для подключения к ПК вам понадобитсяпомимо так называемого rollover-кабеля, идущего в комп-лекте с маршрутизатором, переходник к DB-9, и, естествен-но, COM-порт на рабочей станции. Установка соединенияосуществляется со стандартными значениями – 9600 бод/8бит данных/1 стоп бит/без проверки четности и контроляпрохождения.

В Windows-системах вы можете использовать утилитуHyperTerminal, а в Linux – cu или minicom. В дальнейшем,когда маршрутизатору будет присвоен IP-адрес, вы сможе-те обращаться к нему по протоколам telnet или ssh, но пер-вый раз без консольного подключения не обойтись.

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

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

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

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

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

Как мы видим, отображение приглашения несколько из-менилось. Теперь займемся безопасностью. Отключим уп-равление маршрутизатором через http и https, а также про-приетарный Cisco Discovery Protocol, который нам в дан-ном случае абсолютно не нужен.

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

После чего можно задать и сами пароли. Для начала наконсольное подключение:

Затем таким же способом, но уже на подключение с по-мощью telnet. Вместо команды line con 0 в этом случае бу-дет line vty 0 4, остальное останется неизменным. Зададимтакже пароль, который маршрутизатор будет спрашиватьу уже подключившегося пользователя при попытке перей-ти из пользовательского в привилегированный режим ко-мандой enable:

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

Настройка интерфейсов и PPPoEПоскольку мы настраиваем маршрутизатор, то, естествен-но, у него имеется минимум два интерфейса. Внутренний –Ethernet0 и внешний Ethernet1. Определяются они в строках31-35 и 37-43 соответственно. Для внутреннего интерфейсамы задаем IP-адрес 192.168.0.88 и маску 255.255.255.0,а для внешнего указываем команду: no ip address. Все вне-шние параметры будут получены через PPPoE (строки 42 и43). Для того чтобы закрыть обсуждение ethernet-интерфей-сов, но несколько забегая вперед, обращаю внимание настрочку 33, где указан внутренний интерфейс для NAT.

В строках с 45 по 55 приведено описание интерфейсаDialer0. Это виртуальный интерфейс, через который и осу-

Router>

Router>enable

Router#

Router#erase startup-config

Router#reload

Ðèñóíîê 1

Router#configure terminal

Enter configuration commands, one per line. End with CNTL/Z.

Router(config)#hostname Home

Home(config)#

Home(config)#no ip http server

Home(config)#no ip http secure-server

Home(config)#no cdp run

Home(config)#service password-encryption

Home(config)#line con 0

Home(config-line)#password парольHome(config-line)#login

Home(config-line)#exit

Home(config)#

Home(config)#enable secret пароль_enable_режима

Page 52: 029 Системный Администратор 04 2005

50

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

ществляется подключение к PPPoE. Хочу обратить особоевнимание на 53 и 54 строки, где нужно задать имя и па-роль, выданные вам провайдером. А также на строку 55 –без которой маршрутизатор не получит IP-адресов DNS-серверов провайдера.

Помимо описания Dialer0 к настройке PPPoE относятсятакже строки 25-29 и 77. За более подробной информаци-ей я рекомендую обратиться к документации и сайтуwww.cisco.com. Последнее, о чем необходимо упомянуть, –строка 59, где задается маршрут по умолчанию, указываю-щий на Dialer0.

Настройка NAT, DHCP и брандмауэраПереходим к настройке NAT. Тут в IOS все достаточно про-сто. Помимо 33 строки, про которую уже упоминалось вовремя разбора конфигурации внутреннего интерфейса, заNAT отвечают строки 57 и 64. Как мы видим, 57 строка ссы-лается на 64, в которой описан так называемый access-list,определяющий внутренние IP-адреса, которые мы будемтранслировать во внешний на интерфейсе Dialer0.

С помощью тех же «листов доступа» мы в строках с 65по 76 на Dialer0 организуем простейший межсетевой экран,безусловно пропуская icmp, www, smtp, pop3, ftp и dns-тра-фик. Также при уже установленной tcp-сессии будем прини-мать пакеты с номером порта, большим чем 1023. Кроме того,в строке 49 определен IP-адрес рабочей станции, с которойразрешен доступ по telnet для управления маршрутизатором.Если вам понадобится подкорректировать правила – опятьже смотрите документацию.

Последнее, что мы рассмотрим, – это настройку DHCP-сервера. В строке 17 мы указываем область, выделеннуюпод статические IP-адреса. В нее должен попасть и IP-ад-рес внутреннего интерфейса маршрутизатора. В строках19 – 23 описан пул адресов нашего DHCP-сервера. Коман-дой import all клиентам передаются полученные через Dialer0сетевые настройки. В качестве шлюза по умолчанию выс-тупает внутренний интерфейс с IP-адресом 192.168.0.88.

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

05: service password-encryption06: !07: hostname Home08: !09: enable secret xxxxxx10: enable password xxxxxx11: !12: username homeuser password xxxxxx13: aaa new-model14: !15: aaa session-id common16: ip subnet-zero17: ip dhcp excluded-address 192.168.0.1 192.168.0.9018: !19: ip dhcp pool CLIENT20: import all21: network 192.168.0.0 255.255.255.022: default-router 192.168.0.8823: lease 0 224: !25: vpdn enable26: !27: vpdn-group 128: request-dialin29: protocol pppoe30: !31: interface Ethernet032: ip address 192.168.0.88 255.255.255.033: ip nat inside34: ip tcp adjust-mss 145234: no cdp enable35: hold-queue 32 in36: !37: interface Ethernet138: no ip address39: no ip unreachables40: ip tcp adjust-mss 145241: duplex auto42: pppoe enable43: pppoe-client dial-pool-number 144: !45: interface Dialer046: ip address negotiated47: ip access-group 110 in48: ip mtu 149249: ip nat outside50: encapsulation ppp51: dialer pool 152: dialer-group 153: ppp chap hostname homehostname54: ppp chap password xxxxxx55: ppp ipcp dns request56: !57: ip nat inside source list 102 interface Dialer0 overload58: ip classless59: ip route 0.0.0.0 0.0.0.0 Dialer060: no ip http server61: no ip http secure-server62: !63: access-list 49 permit 192.168.0.1364: access-list 102 permit ip 192.168.0.0 0.0.0.255 any65: access-list 110 permit tcp any any gt 1023 established66: access-list 110 permit tcp any any eq www67: access-list 110 permit tcp any any eq smtp68: access-list 110 permit tcp any any eq pop369: access-list 110 permit tcp any any eq ftp70: access-list 110 permit tcp any any eq ftp-data71: access-list 110 permit tcp any any eq domain72: access-list 110 permit udp any any eq domain73: access-list 110 permit udp any eq domain any74: access-list 110 permit tcp any eq domain any75: access-list 110 permit icmp any any76: access-list 110 deny ip any any77: dialer-list 1 protocol ip permit78: no cdp run79: !80: line con 081: exec-timeout 120 082: password xxxxxx83: no modem enable84: stopbits 185: line aux 086: line vty 0 487: access-class 49 in88: exec-timeout 120 089: password xxxxxx90: !91: end

Ðèñóíîê 2

01: version 12.302: no service pad03: service timestamps debug uptime04: service timestamps log uptime

Page 53: 029 Системный Администратор 04 2005

51¹4, àïðåëü 2005

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

Пока идут горячие споры по поводу возможности исполь-зования GNU/Linux на рабочих столах пользователей, прак-тически все основные производители дистрибутивов ужепредставили соответствующие версии своих продуктов. Впоследнее время наметилась устойчивая тенденция к по-явлению версий дистрибутивов, направленных на конкрет-ную целевую аудиторию, которая, очевидно, будет наблю-даться и в дальнейшем. Причин достаточно. Так, пользова-тели не желают платить за ненужные диски, особенно ког-да задача состоит в простом знакомстве с новинками (вэтом случае хватит и LiveCD), с другой стороны, на серве-ре совсем не нужны графические оболочки и различныемультимедиапроигрыватели. К тому же очень жесткие тре-бования к защите серверов на домашнем компьютере бу-дут скорее мешать, так как пользователю важно в первуюочередь удобство. Среди других позиций, которые хотелосьбы иметь в дистрибутиве, ориентированном на неподготов-ленного пользователя, – простая и понятная программа ус-тановки и максимально возможная поддержка оборудова-ния, включая различные USB, Bluethooth и беспроводныеустройства, TV-тюнеры, не говоря уже о принтерах, скане-рах и программах записи CD и DVD. Далее хотелось быиметь нормальную локализацию и понятную программу по-стустановочной настройки дистрибутива, а также софт навсе (или почти на все) случаи жизни. Еще не хочется долгоискать нужное приложение в меню, т.к. даже при минималь-ной установке Linux количество различных программ пере-валивает за тысячу, и пользователю необходимо иметь хотькакую-то подсказку, что у него установлено и для чего онопредназначено.

Наиболее популярные производители настольных вер-сий Linux, вроде SuSE, Mandrake, Fedora, пытаются разме-стить все приложения на трех-пяти дисках, и пользователюприходится долго выбирать из длинного списка то, что емудействительно нужно. Создатели канадского VectorLinuxSOHO (http://www.vectorlinux.com), основой которого послу-жил Slackware, решили ограничиться одним-единственнымдиском, на который поместилась полноценная рабочая сре-да со всеми необходимыми библиотеками и приложения-ми. В феврале 2005 года был анонсирован 5.0 релиз этогодистрибутива, о котором и пойдет речь в статье. Как видноиз названия SOHO (Small Office/Home Office), этот дистри-бутив предназначен для использования в настольных ком-пьютерах. Главная задача SOHO версии VectorLinux – со-здать удобную рабочую среду с хорошей интеграцией при-ложений, работающую быстро, простую в установке и не

занимающую много места. Последнее реализуется за счеттщательного отбора утилит, в которых реализованы наи-большая функциональность и удобство с одновременнымуменьшением количества дублирующих приложений. Дис-трибутив свободно доступен с ftp-архива в виде iso-обра-за, кроме того, продается в онлайн-магазинах по цене 26.97USD. Последний вариант комплектуется extra-диском, со-держащим дополнительные приложения (ядро 2.6.10,RealPlayer, Opera, Adobe Acrobat Reader и пр.) и книгу поустановке дистрибутива. Кроме SOHO, у VectorLinux есть идругие варианты. Так Standard Edition, размером 350 Мб,содержит минимально необходимую среду, его главныйдевиз – скорость и легкость. Версия Deluxe Edition такжеимеет диск с дополнительным софтом и брошюру, содер-жащую информацию об установке, и во многом напомина-ет SOHO, но составом приложений предназначена большедля профессионального использования. И наконец, «неста-бильная ветка» Dynamite Edition используется в основномразработчиками, на ней отрабатываются все нововведения,которые, возможно, появятся в следующих релизахVectorLinux. Вероятно, «динамит» является самым друже-любным Slackware на сегодняшний день.

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

УстановкаУстанавливать VectorLinux можно несколькими способами,в том числе и используя скачанный iso-образ без записиего на диск. Начинающие пользователи не очень любятSlackware, в том числе и за программу-инсталлятор. Надоотметить, что в VectorLinux, как и в родительском дистри-бутиве, программа установки не блещет графическими кра-сотами: все та же простота и управляемость. Но создателипроделали хорошую работу и упростили то, что упростить,казалось, уже невозможно. Мне приходилось иметь дело спредыдущими версиями VectorLinux. Почти полгода на моемкомпьютере стояла версия SOHO 3.2. Тогда установка зак-лючалась в распаковке 650-мегабайтового архива в ука-занный раздел, и единственное действие, которое необхо-

СЕРГЕЙ ЯРЕМЧУК

SLACKWARE НА РАКЕТНОМ ТОПЛИВЕИЛИ ОБЗОР VectorLinux 5.0.1 SOHO

...Built on Slackware Linux, one of the most stable andbest performing distributions available today...

http://distrowatch.com/?newsid=02042

Page 54: 029 Системный Администратор 04 2005

52

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

димо было сделать пользователю, – это создать его припомощи cfdisk, отформатировать под необходимую файло-вую систему и указать на него программе. Причем можнобыло использовать только одну точку монтирования – кор-невую, что было не совсем удобно. В версии 5.0 у пользо-вателя, производящего установку, выбор несколько боль-ше. Так можно запросто восстановить загрузчик, для чегодостаточно выбрать нужный пункт меню. Для создания раз-делов используется GNUParted (в пункте меню RESIZE) иcfdisk, но теперь в ходе установки позволяется выбрать дветочки монтирования (корневой и /home, рис. 1), которыеможно отформатировать под reiserfs, ext2 или ext3.

Если что-то не выходит, то, выбрав соответствующийпункт меню, можно выйти в оболочку (причем это будет пол-ноценная оболочка с mc и прочими удобствами), где будетдоступен fdisk и другие утилиты для форматирования и про-верки указанных выше файловых систем. Также пользова-тели получили некоторую свободу в выборе программ. Пред-лагаются две группы приложений. В первую, названную«Bulk», входит три пакета: veclinux, содержащий базовуюсистему и основные приложения, OpenOffice, назначениекоторого понятно из названия, и XAMPP, представляющийиз себя удобную инфраструктуру для программирования итестирования веб-приложений (Apache + MySQL + PHP +ProFTP и пр.).

Вторая группа packages включает общим счетом 61 при-ложение, представляющие в большинстве своем альтерна-тиву входящим в базовый комплект. Среди них MPlayer,AmaroK, Kaffeine, XMMS, Sylpheed, GIMP, Inkscape, Firefox(с плагинами Flash, Java и Mplayer), QCad и пр.

После копирования файлов установка собственно и за-канчивается, система предлагает извлечь диск и перезаг-рузиться. После чего наступает этап постинсталляционнойнастройки, в ходе которой необходимо будет определить-ся, куда устанавливать загрузчик, настроить X.Org, времен-ной пояс, сеть, звук, задать пароль root и создать дополни-тельных пользователей, а также выбрать вариант работы(текстовый или графический, настольный или серверный).При выборе графического режима работы сразу же загру-жает X-Window. В серверном варианте, дополнительно стар-туют Samba и sshd. Можно все настроить сейчас, но лучше –потом, загрузившись и воспользовавшись утилитой VASM

(VectorLinux System Menu). Полная установка занимает око-ло 2 Гб.

Оборудование определилось нормально, проблемабыла только с мышью. Причем здесь по сравнению с вер-сией 3.2 положение даже ухудшилось. Тогда внешняя USB-мышь исправно работала, а touchpad пришлось настраи-вать, вручную изменив параметр Protocol с IMPS/2 на PS/2.Теперь же выяснилось, что не работают обе мыши. Такжене советую выбирать русскую раскладку клавиатуры дляX-Window, иначе после перезагрузки, которая последуетпосле окончания настроек, в систему вы не попадете, пото-му что не сможете изменить раскладку. Все это лучше бу-дет сделать потом, вручную подправив файл /etc/X11/xorg.conf. Что ж, удобство программы установки VectorLinuxвесьма спорно, если учесть ориентацию дистрибутива наSOHO-пользователя. Но поскольку процессом инсталляцииобычно заправляют администраторы, то простота интер-фейса является, наоборот, преимуществом, к тому же вре-мени на установку уходит минимум. Начинающие пользо-ватели редко устанавливают систему сами, доверяя этупроцедуру товарищам поопытнее.

Работа в VectorLinuxОсновной вывод после первого моего знакомства с VectorLinux заключался в том, что это удобный настольный дист-рибутив. Буквально с первых шагов чувствовалась заботао пользователе, в консоли выводились подсказки, на рабо-чем столе лежали «нужные» ярлыки. Особенно понрави-лось меню Midnight Commander, в котором были дополни-тельные пункты, позволяющие конвертировать, установить,распаковать, создавать пакеты для установки в дистрибу-тиве. Причем работа с rpm, deb и tgz-пакетами была реали-зована так, что пользователь вообще не задумывался о раз-нице между ними. Плюс дистрибутив имел свой аналог apt-get из Debian, который назывался vec-get. Вопрос о быст-роте как-то не стоял, очевидно, быстродействие версии 3.2было приблизительно на одном уровне с другими дистри-бутивами. Хотя, учитывая продуманные загрузочные скрип-ты и то, что без спроса не один сервис не запускался, гру-зился он действительно быстро. К версии 5.0 применимтолько один термин – ракета. По сравнению с ней осталь-ные – это медленно ползущие черепахи. Рядом с ним побыстродействию можно поставить разве что Gentoo stage3.Я довольно редко работаю в KDE, которую считаю хоть иудобной, но все же несколько медленной средой. В случаес VectorLinux реакция системы была так быстра, что от этихпредрассудков не осталось и следа. И это при том, что сре-ди остальных вариантов SOHO считается самым медлен-ным, отчасти от того, чтобы сделать пребывание пользова-теля более удобным и комфортным. Огорчает то, что в ран-них версиях дистрибутива пакеты для локализации KDEхотя и не устанавливались вместе с системой, но все жеимелись на диске. Теперь их, как было отмечено выше,просто нет. Если же KDE (рис. 2) все равно покажется слиш-ком медленным, то пользователю предлагается альтерна-тива в виде IceWM. Причем его можно загрузить, так ска-зать, в чистом виде, а можно и с включенным ROX-Filer(http://rox.sourceforge.net), который расширяет возможнос-ти IceWM, добавляя поддержку иконок рабочего стола.

Ðèñóíîê 1

Page 55: 029 Системный Администратор 04 2005

53¹4, àïðåëü 2005

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

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

Дистрибутив, кроме стандартных утилит, для настрой-ки, имеет и свой конек – VASM (рис. 3), который появился вверсии 2.0 и постоянно модернизировался с учетом пред-ложений пользователей.

Начиная с версии 3.2, SOHO VASM получил графичес-кий интерфейс (ранее можно было работать только из кон-соли), некоторые пункты стали доступны в виде отдельныхкоманд. При вызове проверяется значение переменной$DISPLAY и в зависимости от того, в каком режиме (кон-соль или X-Window) его запускают, используется соответ-ствующий интерфейс. Некоторые надстроечные функции,предоставляемые скриптом, будут доступны только пользо-вателю root, а часть параметров (настройка X-сервера, об-наружение нового оборудования) работают только в консо-ли. VASM позволяет автоматически отключить, определитьи настроить новое оборудование, берет на себя работу спользователями (добавление, удаление, изменение паро-ля, быстрые команды /sbin/vuser, /sbin/vuseradd, /sbin/vuserdel и /sbin/vpasswd), конфигурацию X-Window и на-стройку менеджера входа в систему, уровень запуска сис-темы, задает сервисы, запускаемые при загрузке, настра-

ивает сеть, принтеры, межсетевой экран, устанавливает заг-рузчик, производит резервное копирование файлов и пр.Как видите, разработчики собрали в одной простой утили-те все возможные настройки, с которыми обычно прихо-дится иметь дело пользователю. Естественно, есть fdisk,Центр Управления KDE, GuardDog (настройка межсетевогоэкрана) и прочие утилиты, предназначенные для настрой-ки отдельных параметров и сервисов, но в VASM сочетает-ся одновременно интеграция возможностей и простота, по-зволяющая без труда понять, как сделать ту или иную опе-рацию, что в совокупности делают его хорошим орудием.Хотя до возможностей SUSE YaST и Mandrake Control Centerон пока не дотягивает.

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

Базируется VLAPT на slapt-get. В более ранних версияхэту работу можно было сделать при помощи VASM, vec-get,пунктов меню Midnight Commander (традиционные утилитыот Slackware вроде installpkg, upgradepkg, естественно, тожедоступны). Сейчас все лишнее убрано, и, очевидно, в даль-нейшем пользователю, не желающему вникать в особен-ности работы slapt-get и других консольных утилит изpkgtools, будет предложен только VLAPT. О конкретных при-ложениях особого смысла говорить нет. Достаточно отме-тить, что поставляемые по умолчанию в дистрибутиве ути-литы охватывают весь спектр потребностей среднестатис-тического пользователя. Меню организовано традиционно,а по клику на файле вызывается сопоставленное приложе-ние. Так, веб-браузером по умолчанию является Firefox, какальтернатива Konqueror. И все. Пользователю не нужнобудет выбирать между 5 разными браузерами. Аналогичнои с остальными приложениями. В VectorLinux нет десяткатекстовых редакторов, проигрывателей музыкальных и ви-деофайлов, почтовых клиентов. Пользователю предостав-лен необходимый, но удобный в работе минимум. В общем,он будет чувствовать себя здесь достаточно комфортно.

Пора подвести итоги. Подойдет ли VectorLinux SOHOначинающему пользователю? Сомнительно, хотя в уже на-строенной системе ему будет трудно запутаться. Но он при-дется по вкусу пользователю с небольшим уровнем подго-товки или желающему освоить работу в Linux, использую-щему Slackware, но считающему его несколько неудобнымили непонятным.

Ðèñóíîê 2

Ðèñóíîê 3

Ðèñóíîê 4

Page 56: 029 Системный Администратор 04 2005

54

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

Трудно представить себе предприятие или организацию, гдене использовались бы базы данных для хранения инфор-мации. Это и списки инвентаризации основных средств, ибазы абонентов – пользователей услуг предприятия, и т. п.На российских просторах все еще огромной популярнос-тью пользуется формат DBF, в частности, именно в немхранит свои таблицы старый добрый FoxPro. Тем не менеежизнь не стоит на месте, рано или поздно возникает воп-рос о переносе всех накопленных данных на более функ-циональные СУБД. В данной статье рассматривается не-сколько способов осуществления такой миграции из FoxProв БД PostgreSQL. Способы различаются как сложностьюреализации (хотя это довольно субъективный критерий), таки степенью автоматизации. Естественно, перечень возмож-ных реализаций никоим образом не ограничивается при-веденным здесь.

Итак, задача – перенести информацию, хранящуюся вформате DBF (СУБД FoxPro 2.6), в базу данных PostgreSQL(используемая версия сервера – 8.0.1, операционная сис-тема – FreeBSD 5.3). Прежде чем приступать к решениям,рассмотрим, что представляет собой DBF-файл.

Формат DBFФормат DBF достаточно прост: 32 байта заголовка файла,«оглавление» таблицы, данные. В таблице представлен фор-мат заголовка с кратким описанием каждого поля:

Далее следует оглавление таблицы – каждые 32 байтаописывают одно поле данных (имя поля, тип данных, длинуполя и т. д.) (см. таблицу 2).

«Оглавление» завершается символом 0x0D, после ко-торого следуют записи данных. Самый первый байт каж-дой записи – признак удаления. Если запись удаляется ко-

мандой delete, она физически остается в файле, а в полепризнака удаления заносится символ 0x2A («*»). Такая за-пись считается помеченной на удаление и по умолчанию воперациях не участвует. Физическое удаление осуществ-ляется только в результате так называемой упаковки (pack)таблицы данных. Таким образом, нужно помнить, что дли-на каждой записи будет определяться суммой длин полейплюс один байт.

Импорт внешних файлов в PostgreSQLСУБД PostgreSQL позволяет осуществлять загрузку дан-ных из внешних файлов и экспорт во внешние файлы с по-мощью команды COPY.

Ее синтаксис следующий:

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

РЕИНКАРНАЦИЯ ДАННЫХ

СЕРГЕЙ СУПРУНОВ

Òàáëèöà 1. Ñòðóêòóðà çàãîëîâêà DBF-ôàéëà

Òàáëèöà 2. Ñòðóêòóðà «îãëàâëåíèÿ» òàáëèöû

serg=> \h copy

Команда: COPY

Описание: копировать данные между файлом и таблицейСинтаксис:

COPY tablename [ ( column [, ...] ) ]

{FROM | TO} { 'filename' | STDIN }

[ [ WITH ]

[ BINARY ]

[ OIDS ]

[ DELIMITER [ AS ] 'delimiter' ]

[ NULL [ AS ] 'null string' ]

[ CSV [ QUOTE [ AS ] 'quote' ]

[ ESCAPE [ AS ] 'escape' ]

[ FORCE NOT NULL column [, ...] ]

Page 57: 029 Системный Администратор 04 2005

55¹4, àïðåëü 2005

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

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

Опции BINARY и OIDS в данном случае нас не интере-суют – они могут быть полезны, когда и импорт, и экспортвыполняется в PostgreSQL.

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

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

Еще один параметр, NULL AS, задает символьную стро-ку, которая будет рассматриваться как значение NULL. Поумолчанию используется последовательность «\N».

Нужно заметить, что при работе в терминале psql дос-тупны две команды: COPY и \COPY. Первая – это SQL-ко-манда, выполняемая сервером, вторая – команда интерак-тивного клиента. Разница между ними в правах, с которы-ми они выполняются. В первом случае возможности досту-па определяются правами процесса postmaster, во втором– правами пользователя, запустившего psql.

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

Несколько слов о кодировкахКак всегда, если речь идет о переносе данных между раз-личными системами, встает вопрос о преобразовании ис-пользуемых кодировок. FoxPro обычно хранит данные вcp866 (FoxPro for DOS) или в cp1251 (FoxPro for Windows).В то же время кодировка баз PostgreSQL может быть иной(у меня, например, это koi8-r). Решить эту проблему можноодним из трех способов:! Создать базу данных PostgreSQL с кодировкой, соответ-

ствующей кодировке DBF-файлов. Это выполняется с по-мощью ключа ENCODING команды CREATE DATABASE.Однако при этом могут возникнуть дополнительныетрудности при обработке данных, если кодировка БД несоответствует установленной локализации операцион-ной системы.

! Если сервер будет использоваться преимущественно каксервер баз данных, а БД будет хранить в основном дан-ные, импортированные из FoxPro, то имеет смысл сра-зу «подогнать» кодировку операционной системы и базыданных под кодировку файла DBF.

! Наиболее универсальный способ – перекодировка дан-ных на стадии импорта.

Первые два способа особых сложностей вызвать не дол-жны, поэтому в дальнейшем сосредоточимся на третьем, ибудем осуществлять преобразование данных из cp866 вkoi8-r в процессе переноса данных.

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

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

Ëèñòèíã 1. Ïðîãðàììà dbf2pg.prg íà FoxPro*  FoxPro êîììåíòàðèè íà÷èíàþòñÿ ñèìâîëîì «*»* Óñòàíàâëèâàåì ôîðìàò äàòûSET DATE TO YMDSET CENTURY ON* Îòêðûâàåì òàáëèöó äëÿ ýêñïîðòàUSE s_cats ALIAS tab* Îïðåäåëÿåì ðàçäåëèòåëü êàê ñèìâîë òàáóëÿöèèm.delimiter = CHR(9)* Îïðåäåëÿåì ñòðîêè äëÿ ïåðåêîäèðîâêè â koi8m.koiabcb = 'ñò¢÷ôõ¡·ùúûüýþÿ¨ªº¯¿öøó!!!!!Ö¤ ·°¹ð¸'m.koiabcs = ' 'm.koiabc = m.koiabcb + m.koiabcsm.dosabcb = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß'm.dosabcs = 'àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'm.dosabc = m.dosabcb + m.dosabcs* Óêàçûâàåì êîäèðîâêóm.dstcp = 'koi8'* Ñîçäàåì ðåçóëüòèðóþùèé ôàéë è îòêðûâàåì åãî* íà çàïèñü (äåñêðèïòîð � â ïåðåìåííîé m.txf)m.txf = FCREATE('table.txt')* Äåëàåì òàáëèöó àêòèâíîéSELECT tab* Öèêë ïî âñåì çàïèñÿì òàáëèöûSCAN

* Ôîðìèðóåì ñòðîêó, óäàëÿÿ ëèøíèå ïðîáåëûm.temp = ALLTRIM(uniqueid) + m.delimiter + ;

ALLTRIM(user) + m.delimiter + ; ALLTRIM(city) + m.delimiter + ; ALLTRIM(address) + m.delimiter + ; ALLTRIM(tariff) + m.delimiter + ; ALLTRIM(category) + m.delimiter + ; IIF(EMPTY(date), '\N', ;

STRTRAN(DTOC(date), '/', '-'))* Åñëè âñòðå÷àåòñÿ òàáóëÿöèÿ � ìåíÿåì íà 4 ïðîáåëàm.temp = STRTRAN(m.temp, CHR(9), SPACE(4))IF m.dstcp == 'koi8'* Åñëè â koi8, òî èñïîëüçóåì ñâîþ ôóíêöèþ

m.temp = dos2koi(m.temp)ELSE* èíà÷å � ïîëüçóåìñÿ øòàòíîé ôóíêöèåé ïåðåêîäèðîâêè

m.temp = CPCONVERT(866, m.dstcp, m.temp)ENDIF* Ýêðàíèðóåì ñèìâîëû '\'

Page 58: 029 Системный Администратор 04 2005

56

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

Все здесь достаточно просто – сканируем таблицу, длякаждой записи формируем строку, содержащую данные,разделенные указанным в начале программы символом.Если в данных встречается символ табуляции – заменяемего четырьмя пробелами (не самое красивое решение, новполне пригодное). Повозиться приходится с перекодиров-кой. Если PostgreSQL работает в cp1251, то для преобразо-вания кириллицы можно воспользоваться штатной функци-ей FoxPro CPCONVERT. Перекодировать в koi8-r она, к со-жалению, не умеет, поэтому здесь придется использоватьсамописную функцию dos2koi. Смысл ее в том, чтобы по-символьно заменить все, что входит в строку m.dosabc сим-волами из m.koiabc, расположенными на тех же местах. Во-обще, чтобы не возиться с перекодировкой силами FoxPro(к слову, приведенная выше функция будет работать оченьмедленно), можно сформировать файл в исходной кодиров-ке, а затем пропустить его через внешний перекодировщик(когда-то мне попадался замечательный плагин к FAR).

После того как текстовый файл сформирован, готовимтаблицу в базе PostgreSQL и выполняем команду COPY:

К достоинствам рассмотренного способа можно отнес-ти то, что на этапе подготовки файла мы можем выполнитьлюбую предварительную обработку данных – разбить однополе (например, «Абонент») на несколько («Фамилия»,«Имя», «Отчество»), объединить несколько полей в одно,выбрать для экспорта только некоторые поля.

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

Например, преобразование таблицы абонентов, содер-жащей 6 символьных полей и около 5000 записей, выпол-няется порядка 40 секунд.

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

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

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

serg=> create table s_cats(uid char(10), catname char(35));

CREATE TABLE

serg=> \copy s_cats from '/usr/home/serg/test/psql/TABLE.TXT'

\.

serg=> select * from s_cats;

uid | catname

------------+-------------------------------------

P0RH0S0SXJ | Без льгот P0RH0S0SXN | Без начисления абонплаты P0RH0S0SXR | ВОВ инвалиды .. .. ..

Ëèñòèíã 2. Ñöåíàðèé dbf2pg.py � ðó÷íîé ðàçáîð ôàéëà DBF#!/usr/local/bin/python# Êëàññ äëÿ õðàíåíèÿ èíôîðìàöèè î ïîëÿõ òàáëèöûclass field:

def __init__(self):self.name = ''self.type = 'C'self.len = 0self.dec = 0self.pos = 0

# Ôóíêöèÿ ôîðìèðîâàíèÿ ôàéëà ñ ðàçäåëèòåëÿìèdef dbf2pg(fname):

# Îòêðûâàåì dbf-Ôàéë â áèíàðíîì ðåæèìådbf = open(fname, 'rb')# Ñ÷èòûâàåì çàãîëîâîêhead = dbf.read(32)# Âûáèðàåì èç çàãîëîâêà ÷èñëî çàïèñåédblen = ord(head[7]) * 16777216 + ↵↵↵↵↵

ord(head[6]) * 65536 + ord(head[5]) * 256 + ↵↵↵↵↵ord(head[4])

# è ïîçèöèþ ïåðâîé çàïèñèposfirst = ord(head[9]) * 256 + ord(head[8])wexit = 0num = 0totlen = 1fields = []while not wexit:# ×èòàåì èíôîðìàöèþ î ïîëÿõ òàáëèöû

line = dbf.read(1)if ord(line) == 0x0D:# Åñëè ïåðâûé ñèìâîë � 0x0D, òî âûõîä �# «îãëàâëåíèå» çàêîí÷åíî

wexit = 1else:# Èíà÷å äî÷èòûâàåì äî 32-õ ñèìâîëîâ

line = line + dbf.read(31)# Íîâûé îáúåêò êëàññà fieldfld = field()# Èìÿ ïîëÿ � ñíà÷àëà äî ïåðâîãî ñèìâîëà 0x00fld.name = line[:line.find('\0')]# Òèï ïîëÿ � 11-é áàéòfld.type = line[11]# Ñìåùåíèå ïîëÿ äàííûõ îò íà÷àëà çàïèñèfld.pos = ord(line[15]) * 16777216 + ↵↵↵↵↵

ord(line[14]) * 65536 + ↵↵↵↵↵ ord(line[13]) * 256 + ↵↵↵↵↵ ord(line[12])

# Äëèíà ïîëÿfld.len = ord(line[16])# Äëèíà äðîáíîé ÷àñòèfld.dec = ord(line[17])# Çàíîñèì èíôîðìàöèþ â ìàññèâ

m.temp = STRTRAN(m.temp, '\', '\\')* Çàïèñü ïîëó÷åííîé ñòðîêè â ôàéë=FPUTS(m.txf, m.temp)

ENDSCAN=FCLOSE(m.txf)USE IN tab*===============================================* Ôóíêöèÿ ïåðåêîäèðîâêè èç cp866 â koi8-rPROCEDURE dos2koiPARAMETER m.stringm.res = ''FOR m.i = 1 TO LEN(m.string)

m.pos = AT(SUBSTR(m.string, m.i, 1), m.dosabc)IF m.pos > 0

m.res = m.res + SUBSTR(m.koiabc, m.pos, 1)ELSE

m.res = m.res + SUBSTR(m.string, m.i, 1)ENDIF

ENDFORRETURN m.res

Page 59: 029 Системный Администратор 04 2005

57¹4, àïðåëü 2005

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

Вывод в данном случае направляется в стандартныйпоток stdout, поэтому для формирования файла следуетиспользовать перенаправление:

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

Однако обратите внимание, что теперь мы имеем всюинформацию о полях данных, включая тип поля и его на-звание. Так почему бы не воспользоваться этим для авто-матического формирования таблицы PostgreSQL нужнойструктуры? Именно эта идея и реализуется, если перемен-ной withcommand присвоить значение 1. При этом загрузкаданных будет осуществляться по тому же принципу, какойиспользуется при восстановлении из текстовой резервнойкопии: при выполнении команды «\i файл» в терминале psqlсодержимое указанного файла будет рассматриваться какввод с клавиатуры в интерактивном режиме.

Таким образом, мы формируем команду CREATE TABLEв соответствии с информацией о названиях и типах полейтаблицы, а затем команду COPY .. FROM stdin, которая бу-дет считывать последующие данные, пока не обнаружит стро-ку «\.». Здесь следует обратить внимание на то, что именаполей должны быть допустимы в PostgreSQL. Так, например,имя USER, вполне нормальное для FoxPro, PostgreSQL рас-сматривает как служебное слово, не позволяя создаватьтаблицу с таким столбцом. Впрочем, это ограничение мож-но обойти, если имена полей заключить в кавычки – в та-ком случае любое имя будет восприниматься «как есть»,правда, и в дальнейшей работе нужно будет использоватькавычки и строго соблюдать регистр символов.

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

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

Путь 3: непосредственная записьв базу данныхРассмотренные выше способы так или иначе привязаны ккоманде COPY. А что, если мы не можем записать тексто-вый файл на диск в том месте, где он будет доступен про-цессу postmaster? Или нет доступа к клиенту psql? В этомслучае можно непосредственно формировать команды

fields.append(fld)num = num + 1totlen = totlen + fld.len

if withcommand:# Åñëè ïåðåìåííàÿ èñòèííà, òî ôîðìèðóåì êîìàíäó# íà ñîçäàíèå òàáëèöû

cmd = 'CREATE TABLE %s (' % tablenamefor i in range(num):

fld = fields[i]cmd = cmd + fld.name + ' 'if fld.type == 'C':

cmd = cmd + ↵↵↵↵↵'char(' + str(fld.len) + '), '

elif fld.type == 'D':cmd = cmd + 'date, '

elif fld.type == 'N' :cmd = cmd + ↵↵↵↵↵'numeric(' + str(fld.len) + ↵↵↵↵↵',' + str(fld.dec) + '), '

# Ïîñëåäíþþ çàïÿòóþ è ïðîáåë ìåíÿåì# íà çàêðûâàþùóþ ñêîáêó è òî÷êó ñ çàïÿòîécmd = cmd[:-2] + ');'print cmd# Ôîðìèðóåì êîìàíäó ÷òåíèÿ äàííûõ èç ïîòîêà ââîäàcmd = 'COPY users FROM stdin;'print cmd

# Ôîðìèðóåì ñàì ïîòîê ââîäàdbf.seek(posfirst)for rec in range(dblen):

if dbf.read(1) != '*':# Åñëè çàïèñü íå ïîìå÷åíà íà óäàëåíèå, òî îáðàáîòêà:

line = ''for i in range(num):# Öèêë ïî âñåì ïîëÿì

fld = dbf.read(fields[i].len)# Åñëè äàòà � ïðåîáðàçóåì# â ôîðìàò YYYY-MM-DD# èç ôîðìàòà YYYYMMDDif fields[i].type == 'D':

fld = fld[:4] + '-' + ↵↵↵↵↵ fld[4:6] + '-' + ↵↵↵↵↵ fld[6:]

# Åñëè äàòà ïóñòàÿ, ìåíÿåì# åå íà çíà÷åíèå NULLif fld == ' - - ':

fld = '\N'# Äëÿ ïóñòûõ ÷èñëîâûõ ïîëåé# ñòàâèì çíà÷åíèå 0if fields[i].type == 'N' ↵↵↵↵↵

and fld[-1] == ' ':fld = '0'

# Ýêðàíèðóåì ñèìâîë �\�,# åñëè òàêîâîé âñòðå÷àåòñÿ# â êîíöå ïîëÿ,# ò.ê. îí ýêðàíèðóåò ðàçäåëèòåëüif fld[-1] == '\\':

fld = fld + '\\'# Äëÿ ñòðîêîâûõ ïîëåé âûïîëíÿåì# ïåðåêîäèðîâêóif fields[i].type == 'C':

fld = unicode(fld, ↵↵↵↵↵'cp866').encode('koi8-r')

# Äîïèñûâàåì ê ñòðîêå çàïèñè# ÷åðåç ðàçäåëèòåëüline = line + fld + delimiter

# Âûâîäèì ïîëó÷åííóþ ñòðîêó, îòðåçàâ# ïîñëåäíèé ðàçäåëèòåëüprint line[:-1]

else:# Åñëè çàïèñü ïîìå÷åíà íà óäàëåíèå,# òî ïðîñòî äî÷èòûâàåì åå îñòàòîê,# íè÷åãî íå îáðàáàòûâàÿ

dbf.read(totlen - 1)dbf.close

# Åñëè ôîðìèðóþòñÿ êîìàíäû äëÿ \i, òî çàêàí÷èâàåì# äàííûå ñòðîêîé �\.�if withcommand:

print '\\.'# Óñòàíàâëèâàåì íàñòðîå÷íûå ïåðåìåííûådelimiter = "\t"withcommand = 1tablename = 'users'# âûçûâàåì ôóíêöèþ ïðåîáðàçîâàíèÿdbf2pg('users.dbf')

$ ./dbd2pg.py > USERS.TXT

Page 60: 029 Системный Администратор 04 2005

58

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

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

Для разнообразия воспользуемся языком Perl. Алгоритмразбора DBF-файла остался прежним, даже синтаксис по-хож. Только на этот раз нужно будет для каждой записи фор-мировать команду INSERT и отсылать ее на сервер СУБД:

Рассмотренный способ универсален как в плане досту-па к базе данных (достаточно иметь возможность отправ-лять на сервер SQL-команды), так и в плане использова-ния конкретной СУБД. При минимальных синтаксическихизменениях данный сценарий можно использовать для ра-боты практически с любой системой управления базамиданных – MySQL, Oralce и т. д. К тому же в данном случаекаждая запись переносится отдельно от других, и если приэтом возникнет ошибка, на импорт других записей это ни-как не повлияет. Правда, если предъявляются высокие тре-бования к целостности данных, то подход «все или ничего»более предпочтителен. За указанные удобства приходитсярасплачиваться быстродействием – та же тестовая табли-ца из 5000 записей переносится почти одну минуту.

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

Ëèñòèíã 3. Ñöåíàðèé dbf2pg.pl#!/usr/bin/perl -w# Ïîäêëþ÷àåì ìîäóëè äëÿ ïåðåêîäèðîâêè è ðàáîòû ñ ÑÓÁÄuse Lingua::RU::Charset qw(alt2koi);use DBI;# Óñòàíàâëèâàåì ñîåäèíåíèå ñ ÁÄ$dbh = DBI->connect('dbi:Pg:dbname=serg', 'serg', '');# Èñõîäíûé ôàéë è èìÿ èòîãîâîé òàáëèöû$fname = 'S_CATS.DBF';$tabname = 's_cats_pl';# Îòêðûâàåì ôàéë DBF â áèíàðíîì ðåæèìåopen(DBF, "$fname");binmode(DBF);read(DBF, $head, 32);$dblen = ord(substr($head, 7, 1)) * 16777216 + ↵↵↵↵↵

ord(substr($head, 6, 1)) * 65536 + ↵↵↵↵↵ ord(substr($head, 5, 1)) * 256 + ↵↵↵↵↵ ord(substr($head, 4, 1));

$posfirst = ord(substr($head, 9, 1)) * 256 + ↵↵↵↵↵ ord(substr($head, 8, 1));

$wexit = 0; $num = 0; $totlen = 1;while(! $wexit) {

read(DBF, $first, 1);if(ord($first) == 13) {

$wexit = 1;} else {# Äàëåå ÷èòàåì ôàéë ñðàçó â ïåðåìåííûå

read(DBF, $name, 10);$name = $first . $name;

# Âûðåçàåì èç èìåíè ñèìâîëû 0x00# (çäåñü ^@ - íå äâà ñèìâîëà, ïðîñòî 0x00

# òàê âûãëÿäèò â vi)$name =~ s/^@//g;read(DBF, $type, 1);read(DBF, $tmp, 4);read(DBF, $tmp, 1);$len = ord($tmp);read(DBF, $tmp, 1);$dec = ord($tmp);read(DBF, $tmp, 14);$fields[$num]{name} = $name;$fields[$num]{type} = $type;$fields[$num]{len} = $len;$fields[$num]{dec} = $dec;$num++; $totlen += $len;

}}# Ôîðìèðóåì êîìàíäó ñîçäàíèÿ òàáëèöû$sqlcommand = "CREATE TABLE $tabname (";for($i = 0; $i < $num; $i++) {

$sqlcommand .= $fields[$i]{name} . ' ';if($fields[$i]{type} eq 'C') {

$tmp = 'char(' . $fields[$i]{len};} elsif($fields[$i]{type} eq 'D') {

$tmp = 'date';} elsif($fields[$i]{type} eq 'N') {

$tmp = 'numeric(' . $fields[$i]{len} .',' . $fields[$i]{dec};

}$sqlcommand .= $tmp . '), ';

}$sqlcommand = substr($sqlcommand, 0, length($sqlcommand) - 2);$sqlcommand .= ');';# Îòïðàâëÿåì åå íà ñåðâåð$sth = $dbh->prepare($sqlcommand);$sth->execute;# Ïåðåõîä íà íà÷àëî äàííûõseek(DBF, $posfirst, 0);for($rec = 0; $rec < $dblen; $rec++) {

read(DBF, $first, 1);if($first ne '*') {

$sqlcommand = "INSERT INTO $tabname VALUES (";for($i = 0; $i < $num; $i++) {

read(DBF, $fld, $fields[$i]{len});if($fields[$i]{type} eq 'C') {

($fld) = &alt2koi($fld);$fld = "'" . $fld . "'";

} else {$fld =~ s/\s//g;

}if($fields[$i]{type} eq 'D') {

if($fld ne '') {$fld = '"' .

substr($fld, 0, 4) . '-' .substr($fld, 4, ↵↵↵↵↵

2) . '-' .substr($fld, 6, ↵↵↵↵↵

2) . '"';} else {

$fld = 'NULL';}

}if(($fields[$i]{type} eq 'N') && ↵↵↵↵↵

($fld eq '')) {$fld = '0';

}$sqlcommand .= $fld . ', ';

}$sqlcommand = substr($sqlcommand, 0,

length($sqlcommand) - 2);$sqlcommand .= ');';# Îòïðàâëÿåì êîìàíäó INSERT$sth = $dbh->prepare($sqlcommand);$sth->execute;

} else {read(DBF, $tmp, 31);

}}close(DBF);$dbh->disconnect;

Page 61: 029 Системный Администратор 04 2005
Page 62: 029 Системный Администратор 04 2005

60

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

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

Большинство современных КПК оснащено модулямибеспроводной связи 802.11, и имеют возможность исполь-зовать GPRS-функции сотового телефона для подключе-ния к Интернету (причем делать это тоже «по воздуху» –через инфракрасный порт или Bluetooth). Этот потенциалсначала поражает, но быстро становится привычным, и че-рез некоторое время отсутствие возможности синхронизи-ровать свой КПК с корпоративным сервером Exchange вос-принимается как нечто совершенно «дикое».

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

Мобильные клиенты на основе Windows Mobile 2003 пре-доставляют администратору богатый арсенал средств за-щиты сетевых соединений. В него входят прекрасно заре-комендовавшие себя протоколы, такие как WPA и 802.1X,L2TP/IPSec, SSL/TLS. Большинство этих технологий исполь-

зует цифровые сертификаты, в связи с чем первым этапомв настройке защищенных коммуникаций является настрой-ка клиентских компонентов PKI на КПК.

Управление сертификатамиВ мобильной версии Windows существует только одно хра-нилище сертификатов, управлять которым можно с помо-щью приложения Certificates («Start →→→→→ Settings →→→→→ System →→→→→Certificates»). В приложении имеется две закладки: Personalи Root.

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

Во второй перечислены доверенные центры сертифи-кации (CA).

ЗАЩИТА КОММУНИКАЦИЙWINDOWS MOBILE

НАТАЛЬЯ МЕЛЬНИКОВАНАТАЛЬЯ МЕЛЬНИКОВА

Ðèñóíîê 1. Óïðàâëåíèå ñåðòèôèêàòàìè

Page 63: 029 Системный Администратор 04 2005

61¹4, àïðåëü 2005

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

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

После подтверждения намерений сертификат будет до-бавлен в список доверенных сертификатов (рис. 1). Полу-чить сертификат CA можно и через Web, для чего необхо-димо зайти на основную страницу веб-интерфейса серве-ра сертификатов и щелкнуть по ссылке «Download a CAcertificate, certificate chain, or CRL». После этого необходи-мо загрузить сертификат в кодировке DER и установить его(рис. 3) как в предыдущем случае.

Следующим этапом является получение персональныхсертификатов. В стандартную поставку Windows Mobile вхо-дит утилита Enroll, которая генерирует ключевую пару, со-здает запрос на получение сертификата и отправляет егосерверу сертификатов. Для взаимодействия с серверомсертификатов используются HTTP-запросы к веб-интерфей-су стандартного CA Windows 2000/2003.

Утилита Enroll имеет возможность запрашивать толькосертификаты, основанные на шаблоне «AuthenticatedSession». Они могут быть использованы для аутентифика-ции устройства в протоколах EAP, IPSec и SSL.

Чтобы настроить сервер сертификатов на выдачу сер-тификатов данного типа, необходимо открыть оснастку уп-равления CA, щелкнуть правой кнопкой мыши на пункте«Certificate Templates» и выбрать пункт «Manage». В появив-шемся окне открыть свойства шаблона «Authenticated

Session», перейти на закладку «Security» и присвоить пра-во Enroll группе мобильных пользователей. Затем нужно сно-ва щелкнуть на пункте «Certificate Templates» в оснастке уп-равления CA и выбрать пункт контекстного меню «New →→→→→Certificate Template To Issue», после чего дважды щелкнутьна пункте «Authenticated Session».

Затем на мобильном устройстве запускается утилитаEnroll («Start →→→→→ Settings →→→→→ System →→→→→ Enroll»). В утилитенеобходимо указать имя пользователя, пароль и адрес сер-вера сертификатов.

Утилита Enroll обладает рядом недостатков. Во-первых,она позволяет запрашивать только сертификаты, основан-ные на шаблоне «Authenticated Session». Во-вторых, Enrollне поддерживает возможности запроса сертификата у сер-вера, требующего использования SSL. Кроме того, утили-та имеет возможность работать только с сервером серти-фикатов Microsoft.

Если возникает необходимость получать сертификаты,основанные на других шаблонах, можно модифицировать со-держимое файла C:\WINDOWS\system32\certsrv\certfnsh.asp.В строке 47 необходимо заменить sAttributes=Request.Form(«CertAttrib») на название требуемого шаблона, напримерsAttributes=«CertificateTemplate:User».

В случае если на предприятии используется сервер сер-тификатов, отличный от Microsoft Certification Authority, мож-но воспользоваться одной из утилит, например PPCCert(http://webs.ono.com/usr030/kiko_vives/ppccert), позволяющихимпортировать файлы в формате PKCS#12 (pfx) в храни-лище Windows Mobile.

Ðèñóíîê 2. Óñòàíîâêà ñåðòèôèêàòà CA

Ðèñóíîê 3. Óñòàíîâêà ñåðòèôèêàòà CA ÷åðåç âåá-èíòåðôåéñ

Ðèñóíîê 4. Äîáàâëåíèå øàáëîíà ñåðòèôèêàòîâ

Ðèñóíîê 5. Çàïðîñ ñåðòèôèêàòà

Page 64: 029 Системный Администратор 04 2005

62

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

Беспроводные соединенияОсновой современных стандартов защиты беспроводныхсетей, таких как Wi-Fi Protected Access (WPA) и 802.11i яв-ляется технология 802.1X. Она была разработана для пре-дотвращения возможности несанкционированного доступак ресурсам сети даже при наличии физического соедине-ния. Перед тем как получить доступ к сети на канальномуровне каждое подключаемое устройство должно пройтиаутентификацию с использованием протокола ExtensibleAuthentication Protocol (EAP) или его модификаций.

В инфраструктуре 802.1X разделяют три основных ком-понента: клиентский компьютер (Supplicant), коммутаторили точка доступа (Authenticator), сервер аутентификации(Authentication Server).

Функции сервера аутентификации выполняет корпора-тивный сервер RADIUS. Он проверяет подлинность предо-ставленных клиентом для аутентификации данных и конт-ролирует доступ к ресурсам сети. Точка доступа или ком-мутатор являются своеобразным посредником (proxy), пре-образующим клиентские запросы EAPoL (EAP over LAN) вданные протокола RADIUS и обратно.

Windows Mobile 2003 поддерживает стандарт WPA саутентификацией 802.1X. При использовании 802.1X, дляаутентификации клиента может быть задействован цифро-вой сертификат (EAP-TLS) либо пароль пользователя (PEAP-MSCHAPv2). Во втором случае протокол MSCHAPv2 будет

работать внутри виртуального канала, зашифрованного спомощью TLS (PEAP расшифровывается как Protected EAP).

Чтобы обеспечить нормальную работу протоколов EAP иPEAP, необходимо установить сертификат, основанный нашаблоне «RAS and IAS Server», на сервер RADIUS и указатьэтот сертификат в политиках удаленного доступа (рис. 6).

Настройки со стороны устройства довольно просты. Пос-ле активации беспроводного интерфейса необходимо пе-рейти в пункт настроек беспроводного подключения(«Settings →→→→→ Connections →→→→→ Connections →→→→→ Advanced →→→→→Network Card») и нажать на ссылке «Add new». В появив-шемся окне указывается SSID сети, после чего на заклад-ке «Network key» выбирается тип аутентификации WPA ишифрование TKIP. На странице 802.1X указывается исполь-зуемый тип аутентификации (рис. 7).

В случае если был выбран метод «Smart Card or Certi-ficate», на устройстве должен присутствовать действующийклиентский сертификат. При использовании метода PEAP-MSCHAPv2 необходимо указать имя и пароль пользовате-ля.

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

Ðèñóíîê 6. Íàñòðîéêà ïîëèòèê óäàëåííîãî äîñòóïà RADIUS

Page 65: 029 Системный Администратор 04 2005

63¹4, àïðåëü 2005

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

сервера RADIUS указан протокол аутентификации, отлич-ный от протокола, используемого устройством.

Построение VPNМобильный клиент на основе Windows может использоватьтехнологии VPN для подключения к ресурсам сети. Поддер-живаются протоколы PPTP и L2TP/IPSec. В случае исполь-зования IPSec для аутентификации устройства могут при-меняться цифровые сертификаты или общий ключ.

Если при соединении с сервером VPN используется немодем, а беспроводной адаптер, необходимо настроить про-фили подключения. Для этого в настройках соединения(«Settings →→→→→ Connections →→→→→ Connections →→→→→ Advanced →→→→→Select Network») нужно открыть настройки «внутренней»сети, нажав на нижнюю кнопку «Edit», после чего на заклад-ке «VPN» нажать кнопку «New» и указать параметры под-ключения к VPN (рис. 8).

Затем указывается, что беспроводной адаптер подклю-чает устройство к Интернету, а не к внутренней сети. Этоделается для того, чтобы Windows могла задействовать VPNпри активном соединении. Для этого в настройках соеди-нений («Settings →→→→→ Connections →→→→→ Connections →→→→→ Advanced»)

необходимо нажать на кнопку Network Card и указать, чтоданные сетевые карты подключены к Интернету (рис. 9).

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

Для мониторинга соединений удобно пользоваться ос-насткой «MMC IP Security Monitor» или утилитой команднойстроки netsh.

Ðèñóíîê 7. Íàñòðîéêà WPA íà êëèåíòå

Event Type: Warning

Event Source: IAS

Event Category: None

Event ID: 2

Date: 02.04.2005

Time: 14:13:40

User: N/A

Computer: DC

Description:

User dom01\User was denied access.

Fully-Qualified-User-Name = dom01.infosec.ru/Users/User

NAS-IP-Address = 192.168.0.50

NAS-Identifier = DWL-2000AP

Called-Station-Identifier = 00-0d-88-84-a2-b1

Calling-Station-Identifier = 00-30-05-73-60-06

Client-Friendly-Name = Access Point

Client-IP-Address = 192.168.0.50

NAS-Port-Type = Wireless - IEEE 802.11

NAS-Port = 0

Proxy-Policy-Name = Use Windows authentication for all users

Authentication-Provider = Windows

Authentication-Server = <undetermined>

Policy-Name = Wireless

Authentication-Type = EAP

EAP-Type = <undetermined>

Reason-Code = 22

Reason = The client could not be authenticated because the Extensible

Authentication Protocol (EAP) Type cannot be processed by the server.

For more information, see Help and Support Center at

http://go.microsoft.com/fwlink/events.asp.

Ðèñóíîê 8. Íàñòðîéêà ïðîôèëÿ VPN

Ðèñóíîê 9. Íàñòðîéêà ñåòåâûõ àäàïòåðîâ

Ðèñóíîê 10. Ñîåäèíåíèå VPN

Ðèñóíîê 11. Ïðîñìîòð ñîåäèíåíèé IPSec â óòèëèòå nesh

Page 66: 029 Системный Администратор 04 2005

64

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

Подробнее об устранении неисправностей в работе IPSecможно узнать из статьи «Неизвестный IPSec», Windows &.NET Magazine №6, 2003 г.

Доступ к серверу ExchangeДля доступа к серверу Exchange из Windows Mobile 2003 при-меняется синхронизация ActiveSync или online-доступ че-рез Outlook Mobile Access (OMA). Обе эти технологии ис-пользуют в качестве транспорта HTTP и должны быть за-щищены с помощью SSL.

Для включения поддержки этих функций на сервереExchange необходимо в оснастке Exchange System Managerоткрыть свойства пункта Mobile Services и разрешить синх-ронизацию со стороны пользователя (Enable user initiatedsynchronization) и поддержку OMA. Дополнительно можновключить обработку запросов от неподдерживаемых уст-ройств.

Это бывает удобно, когда доступ к Exchange осуществ-ляется с настольного компьютера или ноутбука, но посред-ством слабого канала связи. Поскольку интерфейс OMA го-раздо более «лаконичен», чем интерфейс OWA, его исполь-зование помогает экономить время и нервы при чтении по-чты. Поскольку и OMA, и ActiveSync используют аутенти-фикацию Basic, необходимо убедиться, что в настройкахаутентификации сервера IIS установлено правильное имядомена по умолчанию. Кроме того, необходимо включитьобязательное использование SSL при обращении к вирту-альным директориям OMA и Microsoft-Server-ActiveSync. Этоможно проделать с помощью стандартных средств настрой-ки безопасности Internet Information Server.

Настройка ActiveSync на КПК довольно проста. Необходи-мо запустить приложение ActiveSync («Start →→→→→ Programs →→→→→Activesync»), выбрать пункт меню «Tools →→→→→ Options» и назакладке Server указать имя сервера и синхронизируемыеобъекты. Дополнительно можно настроить автоматическуюсинхронизацию через заданные интервалы времени (кноп-ка «Options»).

Если сервер настроен на поддержку SSL, то необходи-мо установить опцию «This server uses an SSL connection»(рис. 13).

Для работы с OMA достаточно подключиться к сети, за-пустить Pocket Internet Explorer и ввести в строке URL видаhttps://<servername>/oma (рис. 14).

Лаконичный интерфейс OMA мало подходит для рабо-ты с заполненными почтовыми ящиками, но позволяет сэ-кономить ресурсы устройства. Хотя, если пропускная спо-собность канала связи не является ограничивающим фак-тором, даже при разрешении экрана 320x240 можно доволь-но комфортно работать с полнофункциональной версиейOutlook Web Access (рис. 15). В современных КПК, поддер-живающих расширение 640x480, OWA практически не от-личается от своего настольного варианта.

Таким образом, мобильные клиенты могут задействоватьсовременные технологии защиты коммуникаций, начинаяс канального уровня модели OSI (WPA) и заканчивая защи-той доступа к приложениям. К неудобствам, возникающимпри настройке Windows Mobile, можно отнести отсутствиевозможности импорта сертификатов в формате PKCS#12и списков отозванных сертификатов. Кроме того, отсутству-ет возможность настраивать IPSec отдельно от L2TP.

Ðèñóíîê 12. Íàñòðîéêà ìîáèëüíîãî äîñòóïà ê Exchange

Ðèñóíîê 13. Íàñòðîéêè ActiveSync

Ðèñóíîê 14. Äîñòóï ê OMA

Ðèñóíîê 15. OWA â ðàçðåøåíèè 320x240

Page 67: 029 Системный Администратор 04 2005
Page 68: 029 Системный Администратор 04 2005

66

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

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

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

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

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

Наиболее часто рассматриваемым в данном контекстеприложением является браузер Internet Explorer. Его возмож-ности не только обеспечивают создание многофункциональ-ных интерактивных веб-приложений, но позволяют зло-умышленнику повышать свои привилегии на рабочей стан-ции пользователя. В связи с большим количеством уязви-мостей в IE, опубликованных во второй половине прошло-го года, в сообществе специалистов в области безопасно-сти довольно бурно обсуждается идея перехода на альтер-нативные программы работы с World Wide Web. Даже та-кая уважаемая организация, как CERT, не удержалась отспекуляций на эту тему [2].

Однако при попытке заменить Internet Explorer в корпо-ративных сетях администратору приходится столкнуться снекоторыми проблемами. Первая – отсутствие необходимыхфункциональных возможностей. Многие распространенныесерверные приложения, такие как Outlook Web Access,SharePoint Portal Server активно используют различные рас-

УПРАВЛЕНИЕ БЕЗОПАСНОСТЬЮINTERNET EXPLORER

НАТАЛЬЯ МЕЛЬНИКОВА

Page 69: 029 Системный Администратор 04 2005

67¹4, àïðåëü 2005

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

ширения DHTML, реализованные только в Internet Explorer.Многие клиентские приложения также используют COM-объекты Internet Explorer для формирования интерфейсапользователя. Таким образом, на клиентском рабочем ме-сте оказывается две программы для работы с WEB – InternetExplorer для обращения к корпоративным приложениям, иальтернативный браузер для выхода в Интернет. Это сни-жает удобство использования и повышает вероятность воз-никновения пользовательских ошибок. Кроме того, возни-кает ряд дополнительных проблем.

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

Кроме того, в сети на основе Active Directory часто про-исходит снижение уровня безопасности, поскольку вместопривычных протоколов аутентификации NTLMv2 и Kerberosначинают использоваться гораздо более уязвимые меха-низмы Digest или Basic. Не всегда хорошо работает аутен-тификация с использованием клиентских сертификатов изхранилища Windows или Smartcard.

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

Давайте рассмотрим стандартные возможности настрой-ки Internet Explorer, использование которых позволяет под-нять уровень защищенности клиентских рабочих мест надовольно высокий уровень. Дополнительным преимуще-ством использования данных настроек является то, что онилегко тиражируются с помощью стандартных средств уп-равления корпоративной сетью на базе Windows, таких какActive Directory.

Основным средством настройки безопасности интернет-приложений Microsoft были и остаются зоны безопасности.Зоны безопасности представляют собой группы адресов(URL), которым соответствуют те или иные настройки под-системы безопасности. Настройки Internet Explorer сохра-няются в разделах HKLM(HKCU) Software\Microsoft\Windows\CurrentVersion\Internet Settings.

По умолчанию Internet Explorer считывает настройки изветви HKCU, однако это поведение можно изменить. Уста-новка значения Enabled в параметре объекта групповой по-литики (ОГП) Computer Configuration\Administrative Templates\Windows Components\Internet Explorer\Security Zones: Use onlymachine settings присваивает значение параметру реестра.HKLM\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\Security_HKLM_only равным 1, после чегоInternet Explorer начинает использовать настройки из ветвиHKLM.

Поскольку разрешения на ветвь HKLM запрещают поль-зователю модифицировать значения, содержащиеся в ни-жележащих разделах, то у него не будет возможности из-менить параметры, назначенные администратором. В боль-шинстве случаев рекомендуется задействовать данную на-стройку, поскольку пользователь или вредоносное про-граммное обеспечение, работающее в его контексте безо-пасности, может менять настройки браузера, снижая уро-вень защищенности. Примером может являться троянскаяпрограмма Win32.Secdrop.C [4], при установке разрешаю-щая загрузку и запуск неподписанных компонентов ActiveXиз Internet.

В случае если задействована эта настройка, все пара-метры Internet Explorer необходимо изменять в ветви HKLM(или разделе Computer Configuration ОГП). Соответствен-но, если для изменения параметров будут задействованысценарии, то необходимо использовать те из них, которыевыполняются с достаточными привилегиями, а именно –Startup Script и Shutdown Script. Кроме того, для примене-ния параметров необходимо, чтобы отработала групповаяполитика уровня компьютера, что в некоторых случаях тре-бует перезагрузки. Ещё одной потенциальной проблемойявляется то, что исчезает возможность персонифицироватьнастройки Internet Explorer для разных пользователей од-ного и того же компьютера. Однако необходимость в раз-личных настройках IE для разных пользователей являетсяскорее исключением, чем правилом.

Для настройки зон безопасности используются следую-щие подразделы: HKLM(HKKU)\Software\Microsoft\Windows\CurrentVersion\Internet Settings:! TemplatePolicies! ZoneMap! Zones

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

В разделе ZoneMap описывается привязка узлов и до-менов к зонам безопасности. Подраздел Domains содер-жит иерархическую структуру, в которой в качестве клю-чей выступают имена доменов и узлов, параметры описы-вают протоколы, а значения параметров указывают на но-мер зоны безопасности. Нижеприведенная структура раз-делов реестра указывает на то, что при обращении к сер-веру www.isc2.org по протоколу https будут задействованынастройки второй зоны безопасности (Trusted Sites, Дове-ренные узлы): ZoneMap → → → → → Domains → → → → → sc2.org → → → → → www → → → → → https(DWORD)=2.

Структура может быть более сложной. Например, сле-дующий вариант предписывает при обращении к любомуузлу в домене *.microsoft.com по протоколу https использо-вать зону безопасности Trusted Sites. Для обработки содер-жимого страниц на сервере www.microsoft.com, полученныхпо протоколу http, будут использоваться настройки зоныInternet: ZoneMap → → → → → Domains → → → → → microsoft.com → → → → → https(DWORD)=2, www → → → → → http (DWORD)=3.

Page 70: 029 Системный Администратор 04 2005

68

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

Если клиентом является Microsoft Windows Server 2003и задействована опция Internet Explorer Enhanced SecurityConfiguration, то настройки следует сохранять в подразде-ле EscDomains, а не Domains.

В случае если разграничение уровня безопасности про-исходит не на основе FQDN, а с помощью IP-адресов, за-действуется подраздел Ranges.

Нижеприведенная структура описывает ситуацию, когдадля IP-адресов, принадлежащих сети 10.1.1.0/24, использу-ется зона безопасности Trusted Sites: ZoneMap → → → → → Ranges →→→→→Range1 → → → → → * (DWORD)=2, :Range (SZ)=10.1.1.1-10.1.1.254.

В подразделе ProtocolDefaults описывается, какая зонабудет задействована в случае использования того или ино-го протокола, если дополнительные правила не примени-мы. По умолчанию большинство протоколов используютзону 3 – Internet.

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

Например, по умолчанию этот параметр для зоны 1(Intranet) имеет значение 219: HKLM(HKCU)\Software\Micro-soft\Windows\CurrentVersion\Internet Settings\Zones\1:

Это значение формируется на основе параметров бито-вой маски (таблица 1) и содержит значения 128, 16 и 8. Со-ответственно в зону Intranet будут автоматически включать-ся те узлы, обращение к которым произошло по имени NetBIOS и узлы, работающие не через Proxy-сервер (параметрHKLM(HKCU)\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyOverride).

Функции зон безопасностиВ подразделе Zones содержатся непосредственно настрой-ки безопасности каждой из зон. Стандартно Windows со-держит 5 зон безопасности (таблица 2). Каждая из этих зонсодержит настройки параметров безопасности, подробноеописание которых доступно в статье KB182569.

Таким образом, сайты, не принадлежащие зоне безо-пасности Local Intranet, обрабатываются в контексте зоныInternet. В случае если эти настройки чрезмерно жесткие,можно включить сервер или домен в зону Trusted Sites. Еслисервер является потенциально опасным, он включается взону Restricted Sites.

Этот подход не соответствует текущим реалиям, посколь-ку весь Internet является слабо доверенной системой. Крометого, администратор ограничен в настройках, поскольку у

него есть только два уровня доверия – Internet и Trusted Sites.Он не может разрешить выполнение сценариев для однойгруппы серверов, включить поддержку ActiveX для второй иотключить активное содержимое для остальных.

Чтобы решить эту проблему, удобно изменить зону поумолчанию, применяемую для различных протоколов: HKLM(HKKU)\Software\Microsoft\Windows\CurrentVersion\InternetSettings\ZoneMap\ProtocolDefaults:

После этого узлы, ранее принадлежащие зоне Internet,автоматически попадут в зону Restricted Sites. Зона Internetстанет промежуточной, и в неё будут включаться сервера,для работы которых необходима поддержка сценариев илинекоторых компонентов ActiveX. Зона Trusted Sites не изме-нит своих функций, в неё включаются узлы, работа с кото-рыми требует всех функциональных возможностей InternetExplorer.

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

Настройка зонЗона безопасности My Computer является основной цельюатакующих. Многие опубликованные уязвимости в InternetExplorer нацелены именно на получение возможности обра-ботки данных в контексте этой зоны, что дает возможностьобращаться к файловой системе и запускать программы [5].В Windows XP Service Pack это поведение изменено с помо-щью механизма «Local Machine Zone Lockdown» [6]. Однако,как показывает практика, задействованные настройки не-достаточно строги, поэтому рекомендации по усилению па-раметров безопасности для XP SP2 также актуальны.

Рекомендуется дополнительно настраивать безопас-ность для этой зоны, запрещая обработку сценариев и/иликомпонентов ActiveX. В статье KB833633 описано, как на-страивать параметры зоны безопасности с помощью моди-

Òàáëèöà 2

ftp(DWORD)=4http(DWORD)=4https(DWORD)=4

Flags(DWORD)= 219

Òàáëèöà 1. Çíà÷åíèå ïàðàìåòðà Flags

Page 71: 029 Системный Администратор 04 2005

69¹4, àïðåëü 2005

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

фикации реестра. Однако зачастую удобней предваритель-ную настройку осуществлять с помощью GUI. Для того что-бы зона безопасности отображалась в Internet Explorer, не-обходимо уменьшить значение параметра Flags для этойзоны на 32: HKLM(HKCU)\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0:

После этих изменений зона появится на закладке Securityприложения Internet Options и станет доступной для моди-фикации через графический интерфейс.

В результате настройки могут возникнуть проблемы приработе с некоторым программным обеспечением, исполь-зующим Internet Explorer. Типичным примером являются ос-настки управления MMC. Поскольку правая панель в осна-стках представляет собой компонент ActiveX, их отключе-ние в зоне безопасности My Computer приводит к нерабо-тоспособности некоторых оснасток.

Наиболее приемлемым решением здесь является раз-решение использования только одобренных администрато-ром компонентов, для чего необходимо установить пара-метр безопасности Run ActiveX Controls and Plugins равнымAdministrator Approved. После этого необходимо описать раз-решенные элементы ActiveX, что можно сделать через ре-дактор групповых политик (см. рис. 1) в разделе «User

Configuration →→→→→ Administrative Templates →→→→→ WindowsComponents →→→→→ Internet Explorer →→→→→ Administrator ApprovedControls».

По умолчанию набор компонентов невелик и может несодержать необходимые ActiveX. В этом случае целесооб-разно изменить административный шаблон %systemroot%\inf\inetres.adm, добавив в него CLSID используемых элемен-тов ActiveX.

Аналогичные настройки осуществляются различнымиутилитами, осуществляющими настройку безопасности

Flags(DWORD)=1

Ðèñóíîê 1. Ðàçðåøåííûå ýëåìåíòû ActiveX

Ðèñóíîê 2. Ðåäàêòèðîâàíèå àäìèíèñòðàòèâíîãî øàáëîíà

Page 72: 029 Системный Администратор 04 2005

70

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

компьютера. Например, Qwik-Fix Pro [7] в качестве одногоиз защитных механизмов устанавливает более строгие раз-решения в зоне My Computer.

При использовании описанного выше подхода RestrictedSites является стандартной зоной безопасности для вне-шних узлов, необходимо ослабить настройки этой зоны. Длянормальной работы большинства пользователей достаточ-но разрешить загрузку файлов из неё. Ещё одной полез-ной настройкой является разрешение обработки файловCookie в Restricted Sites. Это устранит проблемы со многи-ми серверами, отслеживающими сессию с помощью Cookie.

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

В зоне безопасности Internet обычно разрешается под-держка сценариев и некоторых ActiveX-компонентов, напри-мер, Macromedia Flash. Загрузку и инициализацию всех под-писанных и неподписанных элементов в этой зоне лучшеотключить. Для доверенных узлов (Trusted Sites) можно вклю-чить поддержку загрузки подписанных элементов ActiveX.

Желательно отключить формирование состава зоныбезопасности Local Intranet на основе сетевой топологии идобавлять узлы или сети в неё вручную. Это защитит отвнутренних атак, таких как установка ложных веб-серве-ров, NTLM Relaying [8] и т. д.

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

Расширение набора зонПри необходимости можно расширить набор зон безопас-ности, доступный для Internet Explorer. Для этого в реестрдобавляется зона с новым номером (например, 5). Самыйпростой способ произвести подобную операцию – это экс-портировать раздел реестра, содержащий наиболее близ-кую по настройкам зону в текстовый файл, изменить его иимпортировать в реестр (рис. 3).

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

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

Хорошим примером является раздражающее сообще-

ние об отключенных ActiveX, выскакивающее при обраще-нии к каждой странице, где содержится запрещенный ком-понент. До выхода Windows XP Service Pack 2 эту проблемуприходилось решать путем модификации соответствующе-го компонента Internet Explorer. Также могут возникнуть про-блемы с некоторыми приложениями при изменении настро-ек безопасности для зоны My Computer.

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

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

Централизованно настраивать параметры безопаснос-ти для Internet Explorer удобнее всего через групповые по-литики. Для этого в соответствующем ОГП необходимо от-крыть раздел User configuration/Windows settings/IE Userconfiguration/Windows settings/IE Maintenance/Security, дваж-ды щёлкнуть на Security Zones and Content Ratings и поста-вить переключатель в положение Import the current securityzones and privacy settings (рис. 4).

В административном шаблоне, входящем в Windows XPService Pack 2, настройка зон безопасности была вынесе-на в отдельную ветку (рис. 5). Соответственно появиласьвозможность настройки параметров для всех зон, включаяMy Computer непосредственно в объекте групповой поли-тики. Для того чтобы применять эти настройки в домене,достаточно импортировать в групповую политику админис-

Ðèñóíîê 3. Äîáàâëåíèå çîíû áåçîïàñíîñòè

Page 73: 029 Системный Администратор 04 2005

71¹4, àïðåëü 2005

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

Ðèñóíîê 5. Íàñòðîéêè çîí áåçîïàñíîñòè â ÎÃÏ

тративный шаблон %systemroot%\inf\inetres.adm из дистри-бутива Windows XP Service Pack 2.

Хотя распространенность уязвимостей типа «Внедрениесценариев» (Cross-Site Scripting) в веб-серверах делает кон-цепцию разделения уровня безопасности по зонам на ос-нове имен доменов и IP-адресов серверов очень условной,не стоит отказываться от этого механизма защиты.

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

опубликованным проблемам. Кроме того, не стоит забы-вать о других средствах защиты, таких как управление об-новлениями безопасности и фильтрация содержимого. На-пример, на сервере www.isatools.org можно найти сценарии,настраивающие ISA Server 2004 на блокировку распрост-раненных атак.

Литература:1. Обход средств защиты клиентских приложений. – http://

www.security.nnov.ru/advisories/bypassing.asp.2. US-CERT. Vulnerability Note VU#713878. – http://www.kb.

cert.org/vuls/id/713878.3. Drew Copley. Switching Software Because of Bugs. – http://

www.securityfocus.com/archive/1/367723/2004-06-25/2004-07-01/0.

4. Trojan Win32.Secdrop.C. – http://www3.ca.com/securityadvisor/virusinfo/virus.aspx?id=40225.

5. Internet Explorer «Object Type» vulnerability. – http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2003-0532.

6. Windows XP Service Pack 2 Enhancements to InternetExplorer 6. – http://www.microsoft.com/windows/ieak/techinfo/deploy/60/en/appendix.mspx.

7. Qwik-Fix Pro. – http://www.pivx.com/qwikfix.asp.8. NTLM и корпоративные сети. – http://www.securitylab.ru/

49547.html.

Ðèñóíîê 4. Èìïîðò íàñòðîåê çîí áåçîïàñíîñòè â ÎÃÏ

Page 74: 029 Системный Администратор 04 2005

72

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

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

В первой части статьи мы рассмотрели средства конвер-тирования в форматы «неразмеченный текст», man-страни-ца и HTML. В этой части рассмотрим конвертирование вPostScript и PDF.

Напомню, что POD-документ состоит из абзацев, кото-рые разделяются пустой строкой. Абзацы бывают трёх ти-пов: форматированные, для представления обычного тек-ста, неформатированные, для листингов программ, и уп-равляющие, для формирования структурных элементов (за-головков, списков) и внедрения формат-специфическихвставок. Неформатированные абзацы начинаются с пробе-ла. Управляющие – с команды. В форматированных и уп-равляющих абзацах допустимо элементарное оформлениетекста (например, I<курсив> или B<жирный шрифт>) и встав-ка не ASCII-символов (например, E<deg> – значок градуса).

Команды начинаются со знака «равно» (например, =head1задаёт заголовок первого уровня).

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

На сайте журнала http://www.samag.ru в разделе «Ис-ходный код» вы можете взять архив с POD-кодом и всемиобсуждаемыми здесь скриптами.

Конвертирование POD в TeX,PostScript и PDFДля конвертирования POD-документов в форматы PostScriptи PDF проще всего сперва сконвертировать POD в LaTeX,a из LaTeX-исходника получить все необходимые PostScript-и PDF-файлы.

На первый взгляд такой путь может показаться излиш-не сложным. Действительно, мы уже умеем создавать man-страницы (см. первую часть статьи). А из них легко можнополучить PS- или PDF-файл; например так:

Но это экстенсивный путь. Во-первых, man-документ ненесёт никакой информации о кодировке и корректное кон-

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

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

Источник проблемы – модуль Pod::Find, который с по-мощью Perl-оператора -T проверяет, является ли файл дей-ствительно текстовым. Этот оператор может счесть ваш до-кумент двоичным файлом из-за присутствия в нём русскихбукв.

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

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

И конечно, вам следует настроить локаль. Проще всегоэто сделать, установив переменную среды LANG. У меняLANG=ru_RU.KOI8-R. В вашей системе называние русскойлокали может слегка отличаться. Вы можете посмотретьполный список локалей, установленных в вашей системе,выполнив команду locale -a.

СИСТЕМА СОЗДАНИЯ ДОКУМЕНТАЦИИ PODЧАСТЬ 2

СИСТЕМА СОЗДАНИЯ ДОКУМЕНТАЦИИ PODЧАСТЬ 2

АЛЕКСЕЙ МИЧУРИН

cat page.man | /usr/bin/tbl | /usr/bin/groff -S -Wall -mtty-char -man -Tps >page.ps

use locale;

Page 75: 029 Системный Администратор 04 2005

73¹4, àïðåëü 2005

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

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

Самое простое решение – отредактировать модульPod::Find, удалив соответствующую проверку. Внимание!Cохраните оригинальную версию файла, прежде чем редак-тировать его! В моей системе это файл /usr/local/lib/perl5/5.8.5/Pod/Find.pm. У меня установлен Pod::Find версии 0.24_01,в нём проверка выполняется в строке 251. Чтобы отменитьпроверку замените

на

Так или иначе теперь мы заставили pod2latex работатьс русскими документами, и вы точно сможете сконвертиро-вать русскоязычный POD-документ в формат LaTeX. Но до-кумент окажется неполным.

Дело в том, что LaTeX-документы, как и HTML-докумен-ты, состоят из заголовка и тела. Утилита pod2latex создаёттолько тело. Надо сказать, что эта утилита способна со-здать и полный документ, но в нём не будет содержатьсяникакой информации о языке и кодировке, то есть для рус-скоязычных документов эта возможность не очень полез-на. Видимо, и разработчики POD считают её не очень по-лезной, так как по умолчанию она отключена.

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

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

Преамбула LaTeX документаВ преамбуле LaTeX-документов располагаются инструкции,в соответствии с которыми производится вёрстка докумен-та. Вот пример преамбулы. Я постарался упомянуть в нейвсе пакеты и директивы, которые часто бывают полезны приразработке документов. Поэтому часть директив закоммен-тирована (во избежание противоречий). Комментариями вLaTeX являются все символы от «%» до «конца строки» вклю-чительно. Мы обсудим и закомментированные директивы.

Первым делом мы задаём класс документа (\document-class). Настраиваем размер шрифта (10pt), размер бумаги(A5), если вам необходимо сверстать документ в две ко-лонки, добавьте через запятую параметр twocolumn. Здесьже указан класс документа (article). LaTeX поддерживаеттри размера шрифта 10, 11 и 12 пунктов. Необычный раз-мер бумаги мы используем умышленно. Стиль article наибо-лее подходит для короткой статьи, LaTeX поддерживает идругие стили.

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

В документах класса article предусмотрены заголовкиsection, subsection и subsubsection, то есть заголовки пер-вого второго и третьего уровней. В классах report и bookдобавляется возможность разбивать документы на главы,новая команда chapter (и её близнец part), создаёт заголо-вок как бы нулевого уровня. Pod2latex не создаёт глав. Содной стороны, это делает результаты работы pod2latex ма-лопригодными для вёрстки в классах report и book; с дру-гой стороны, получаемые article-документы легко и есте-ственно могут входить как отдельные главы в большойreport-документ.

Если вы планируете разрабатывать документы большо-го объёма и объединять POD-документы, в первую очередьобратите внимание на ключ -h1level утилиты pod2latex. Онпозволяет получить документы, в которых все заголовкилогически «сдвинуты», например POD-команде =head1 со-ответствует подзаголовок (второй уровень) и так далее.Такие документы можно использовать, как разделы или под-разделы более крупных документов.

Из возможностей LaTeX обратите внимание на колон-титулы (команды pagestyle и thispagestyle). Если в вашем

unless(-f $file && -T _ && ($file =~ /\.(pod|pm|plx?)\z/i ↵↵↵↵↵|| -x _ ))

unless(-f $file && ($file =~ /\.(pod|pm|plx?)\z/i || -x _ ))

\end{document}

% Çàäà¸ì ãëîáàëüíûå àòðèáóòû äîêóìåíòà\documentclass[10pt, a5paper]{article}\usepackage[magstep2]{scale}%\usepackage[a3paper]{geometry}% Èçìåíÿåì ïîëÿ\addtolength{\hoffset}{-1cm}\addtolength{\textwidth}{2cm}\addtolength{\voffset}{-1in}\addtolength{\textheight}{2in}% Êðàñíàÿ ñòðîêà\setlength{\parindent}{0.3cm}% Ðàññòîÿíèå ìåæäó àáçàöàìè\setlength{\parskip}{0pt}% Ðóññêèé ñòèëü îôîðìëåíèÿ àáçàöåâ\usepackage{indentfirst}

% Îãîâàðèâàåì êîäèðîâêó äîêóìåíòà%\usepackage[cp866]{inputenc}\usepackage[koi8-r]{inputenc}\usepackage[russian]{babel}\selectlanguage{russian}\usepackage{draftcopy}% Âêëþ÷àåì ãðàôè÷åñêèé ïàêåò\usepackage[dvips]{graphicx}%\graphicspath{{ps/}}% Ìàêðîñ äëÿ âñòàâêè êàðòèíîê\newcommand{\inspsfig}[3]{\begin{figure}[!htbp]\begin{center}\includegraphics[angle=0, width=#2\textwidth]{#1}\end{center}\caption{#3}%\label{text}\end{figure}}% Çàäà¸ì ìåæñòðî÷íûé èíòåðâàë\linespread{1}% Äîêóìåíò íà÷àëñÿ\begin{document}%  íà÷àëå äîêóìåíòà ãåíåðèðóåì îãëàâëåíèå è ...\tableofcontents% ... ñïèñîê èëëþñòðàöèé\listoffigures% Ìîæíî íà÷àòü äîêóìåíò ñî ñëåäóþùåé ñòðàíèöû%\newpage% à ìîæíî ïðîñòî çàäàòü îòñòóï%\vspace{50mm}

Page 76: 029 Системный Администратор 04 2005

74

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

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

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

Если вы будете создавать одностраничные инструкции-памятки, то наверняка захотите подавить нумерацию стра-ниц. Это делается командой \pagestyle{empty}.

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

рый масштабирует листы, увеличивая их в 1.4 раза. Такимобразом, мы получим документ на бумаге привычного фор-мата A4 и шрифт из «десятого» превратится в «четырнад-цатый». Если вам нужен, скажем, «двенадцатый» шрифт,то вы можете просто сразу указать 12pt, размер бумаги A4и не использовать пакет scale.

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

Серия команд \addtolength изменяет поля документа. Поумолчанию LaTeX делает очень большие поля. Считается,что это правильно с точки зрения профессиональной вёрст-ки, но людям, навсегда испорченным программой MSWord,невозможно привыкнуть к этой красоте.

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

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

Пакет inputenc задаёт кодировку LaTeX-файла. Я исполь-зовал koi8-r. LaTeX поддерживает огромное количество ко-дировок, среди которых cp866, cp1251, maccyr. Поддержи-ваются и украинские кодировки.

Пакет babel и команда \selectlanguage{russian} русифи-цирует LaTeX. После подключения этого пакета LaTeX бу-дет автоматически использовать русские слова «Оглавле-ние», «Рисунок», «Глава» и другие.

Пакет draftcopy выполняет чисто декоративную функ-цию. На всех страницах наискосок печатается слово draft.Это удобно, когда вы распечатываете неокончательную,«черновую» версию документа.

Далее мы подключаем графический пакет graphicx. Есливы храните включаемые графические файлы в отдельнойдиректории, удобно использовать директиву \graphicspath,чтобы раз и навсегда указать путь к картинкам. Вам, во-

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

С помощью команды \newcommand я создал макрос,позволяющий в дальнейшем легко добавлять иллюстрации.Подробное описание способов включения графики в LaTeXвыходит за рамки настоящей статьи.

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

В конце преамбулы задаём межстрочный интервал ко-мандой \linespread.

С команды \begin{document} начинается тело LaTeX-до-кумента. Преамбула закончилась, всё дальнейшее будетпопадать на страницы.

Я включил в тело автоматически создаваемые оглав-ление (команда \tableofcontents) и список иллюстраций (\list-offigures).

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

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

Тем, кто хочет лучше узнать LaTeX, я бы очень реко-мендовал книгу «Не очень краткое введение в LaTeX2e».Она очень проста, компактна и охватывает широкий спектрвозможностей LaTeX. Перевод этой книги (Б. Тоботрас) до-ступен по адресу: http://xtalk.msk.su/tex.

О кириллизации LaTeX (включая настройку системы ав-томатических переносов) подробно написано в «The LinuxCyrillic HOWTO (russian)» Евгения Балдина, доступном поадресу: http://www.inp.nsk.su/~baldin.

Вот как выглядят первые две страницы моего примера,свёрстанные с приведённой преамбулой (рис. 1).

Незначительные изменения в преамбуле позволяют су-щественно изменить результат (рис. 2).

Здесь документ свёрстан «двенадцатым» шрифтом вдве колонки.

Итак, конвертируем POD в PostScript и PDFВы видите, что pod2latex выдаёт достаточно «сырой» мате-риал. С одной стороны, это хорошо, потому что из этого«материала» можно «вылепить» практически что угодно.С другой стороны, «лепить» каждый раз с нуля – не оправ-данно трудоёмко.

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

Сперва создаём «сырой» файл:

Будет создан файл file.tex (расширение добавляется ав-томатически).

Затем чуть корректируем «сырой» файл:

pod2latex -out file file.pod

Page 77: 029 Системный Администратор 04 2005

75¹4, àïðåëü 2005

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

Первый sed-конвейер уничтожает пустые метки, которыесоздаются из-за нашей русскоязычности. Второй sed-кон-вейер удаляет звёздочку во всех директивах «subsection*».Это не обязательная операция. Звёздочка говорит о том,что раздел не должен отображаться в оглавлении. Pod2latexпредполагает, что в оглавление войдут только заголовкипервого уровня. Обычно, это как раз то, что нужно. Но мнезахотелось, чтобы все заголовки попали в оглавление. Каквидите, добиться этого совсем не сложно.

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

Теперь мы получили полноценный LaTeX-файл file-14pt.tex.Дважды обработав его системой latex, мы получаем одно-имённый dvi-файл. DVI (DeVice Independent) – стандартныйформат, генерируемый системой LaTeX. Несмотря на гром-кое название, его не следует использовать для обмена ин-формацией. Дело в том, что dvi-файл обычно далеко несамодостаточен. Например, он не включает графическиеобъекты, а содержит только ссылки на них. Поэтому, есливы перенесёте dvi-файл на другую машину или просто пе-репишете его в другую директорию, не предприняв ника-ких дополнительных мер, то скорее всего его уже не удаст-ся просмотреть или конвертировать в другой формат. К сча-стью, из dvi-файла можно сделать полноценный PostScript-и/или PDF-файл:

Двойная обработка необходима, чтобы latex смог со-здать оглавление.

Кстати, утилита dvips тоже может масштабировать до-кументы (ключ -x). Можно было не использовать пакет scale,а отмасштабировать страницы на этапе конвертированияdvi-файла в PostScript-формат.

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

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

Графика в PostScript и PDFДля LaTeX естественным форматом представления графи-ки является PostScript. Существуют средства, позволяющиеработать и со многими другими форматами, но эти сред-ства представлены отдельными пакетами, которые могут и

Ðèñóíîê 1

cat file.tex |sed 's/\\label{_}//g' |sed 's/\(subsection\)\*/\1/g' > file.tex.temp

cat doc-head-14pt.tex file.tex.temp doc-tail.tex > file-14pt.tex

latex file-14pt.texlatex file-14pt.texdvips -o file-14pt.ps file-14pt.dvips2pdf file-14pt.ps

Page 78: 029 Системный Администратор 04 2005

76

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

не входить в ваш дистрибутив LaTeX (особенно если выпользуетесь LaTeX под Windows). Я бы советовал работатьтолько с PostScript, тем более что получить файл в этом фор-мате совсем не сложно. С таким преобразованием легкоможет справиться, например, утилита convert из набораImageMagic.

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

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

Этот параграф предназначен для LaTeX-документов (=forlatex). В нём вызван мой макрос \inspsfig. Первый параметр,как вы видите, имя eps-файла. Второй – доля листа, кото-рую должна занять картинка по горизонтали. Третий – под-пись к картинке. Нумерацию рисунков LaTeX ведёт автома-тически.

Давайте вкратце рассмотрим, как работает этот мак-рос, и что в нём можно изменить и адаптировать под вашинужды.

Итак, текст макроса таков:

В первой строке мы создаём новую команду \inspsfig, укоторой будет три аргумента. В теле команды создаётсяокружение \begin{figure}-\end{figure}. Команда \begin{figure}имеет строку-параметр, о которой следует сказать отдель-но. Этот параметр определяет, где будет расположен пла-вающий объект (каковым является иллюстрация).

В строке-параметре «!htbp» первый символ заставляетLaTeX не рассматривать большинство своих правил и ста-раться выполнить инструкции «во что бы то ни стало». Бук-ва h говорит о том, что первым делом LaTeX должен попы-таться разместить иллюстрацию там, где она находится втексте документа. Если это невозможно, то LaTeX рассмот-рит букву t и постарается разместить картинку вверху стра-ницы. Если и это ему не удастся, будет рассмотрена b, пред-писывающая размещать плавающий объект внизу страни-цы. И, наконец, если все попытки закончатся неудачей, тов силу вступит инструкция p, и LaTeX выделит для плаваю-щего объекта отдельную страницу и разместит его там.

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

Команда \includegraphics вложена в окружение \begin{center}-\end{center}. Картинка будет отцентрована по гори-зонтали. Вы видите, что мы не поворачиваем картинку(angle=0), а ширину рассчитываем как произведение вто-

Ðèñóíîê 2

=for latex\inspsfig{two.eps}{.35}{Íåòðóäíî çàìåòèòü, ÷òî, ñîâìåñòèâäâóõ ìàëåíüêèõ äðàêîí÷èêîâ, ìû ïîëó÷èì áîëüøîãî.}

\newcommand{\inspsfig}[3]{\begin{figure}[!htbp]\begin{center}

convert file.bmp file.ps

\includegraphics[angle=0, width=#2\textwidth]{#1}\end{center}\caption{#3}%\label{text}\end{figure}}

Page 79: 029 Системный Администратор 04 2005

77¹4, àïðåëü 2005

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

рого параметра макроса \inspsfig на ширину текста(width=#2\textwidth). В качестве имени файла с картинкойбудет использован первый параметр \inspsfig.

Команда \caption задаёт подпись к рисунку.Закомментированная команда \label бывает полезна, если

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

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

Теперь можно на одной стороне листов напечатать со-держимое файла page-14pt-booklet-up.ps, а на другой – page-14pt-booklet-down.ps и сброшюровать. Вряд ли MSWord по-зволит вам сделать буклет (и не только буклет) так же легко.

Подробнее о pstops вы можете почитать в соответству-ющем man.

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

Следующая команда обработает файл page-12pt.ps исоздаст серию файлов file001.jpeg, file002.jpeg и так далее,по одному на каждую страницу.

Улучшить качество изображения (и увеличить размерфайлов) можно, изменив разрешение в параметре -r.

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

Сперва создаём PPM-изображения каждой страницы:

Далее конвертируем все страницы (пусть иx будет че-тыре) в формат DjVu:

И объединяем полученные файлы в один документ:

В файле result.djvu объединены все страницы.Если проделать все эти операции с четырёхстраничным

документом-примером к этой статье, то размер DjVu-файласоставит менее 25 Кб.

Если вам понадобится документ MSWord или RTF, топроще всего создать HTML-документ (конвертирование вHTML мы рассматривали в предыдущей статье), скопиро-вать его из Explorer в Word и «сохранить как...».

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

Проверка корректности PODДля проверки корректности POD-исходника существуеточень полезная программа podchecker. Если вы укажете ейопцию -warnings, то получите все возможные предупреж-дения. Пример:

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

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

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

Система POD продолжает развиваться. Наиболее мно-гообещающей мне представляется команда =encoding. Со-гласно документу perlpod, она должна использоваться вначале документа.

Приведён даже пример (цитирую!):

Упоминается эта команда и в perldocspec. Но я, честноговоря, так и не понял, как её использовать. Podcheckerсообщает, что такая команда ему не знакома. Конвертерыпредупреждают об ошибке и игнорируют её.

Тем не менее, работа над форматом и средствами PODпродолжается, и сделано уже немало. Работать с POD про-сто, приятно и эффективно.

pstops '4:[email protected](21cm,0)[email protected](21cm,14.85cm)' ↵↵↵↵↵page-14pt.ps page-14pt-booklet-up.ps

pstops '4:[email protected](21cm,0)[email protected](21cm,14.85cm)' ↵↵↵↵↵page-14pt.ps page-14pt-booklet-down.ps

gs -sDEVICE=jpeg \-sOutputFile=file%03d.jpeg \-dBATCH \-dNOPAUSE \-r72x72 \ page-12pt.ps

gs -sDEVICE=ppm \-sOutputFile=file%d.ppm \-dBATCH \-dNOPAUSE \-r120x120 \ page-12pt.ps

for i in 1 2 3 4do

cpaldjvu -dpi 120 file$i.ppm file$i.djvudone

djvm -create result.djvu file1.djvu file2.djvu ↵↵↵↵↵file3.djvu file4.djvu

podchecker -warnings file.pod

=for html<table><tr><th>A</th><th>B</th></tr>

<tr><td>A</td><td>B</td></tr></table>

=encoding koi8-r

Page 80: 029 Системный Администратор 04 2005

78

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

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

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

Выравнивание цикловВыравнивание циклов (loop alignment) имеет много общегос выравниванием ветвлений, о котором мы уже говорили впредыдущей статье. Кратко опишем ситуацию для тех, ктоне читал ее. Компиляторы msvc и icl вообще не выравнива-

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

Компилятор gcc позволяет выравнивать циклы на вели-чину, кратную степени двойки. За это отвечает ключ -falign-loops=n (по умолчанию n равен двум, что, как уже отмеча-лось, далеко не самая лучшая стратегия выравнивания, илучше выравнивать циклы по границе четырех байт).

Ключ -fno-align-loops (аналогичный ключу -falign-loops=1)отключает выравнивание. На уровнях оптимизации -O2 и-O3 выравнивание циклов по умолчанию включено, и от-ключать его было бы неразумно.

Итого:! msvc – не выравнивает.! icl – не выравнивает.! gcc – выравнивает по границе степени двойки.

Разворот цикловМикропроцессоры с конвейерной архитектурой (а к тако-вым относятся все современные x86-процессоры), плохоприспособлены для работы с циклами. Для достижения наи-

ТЕХНИКА ОПТИМИЗАЦИИ ПОД LINUXЧАСТЬ 3

КРИС КАСПЕРСКИ

Áîëüøîå òåñòîâîå ñðàâíåíèå Linux-êîìïèëÿòîðîâ ïðîäîëæàåòñÿ! Òåìà ñåãîäíÿøíåãîèññëåäîâàíèÿ � öèêëû è èõ îïòèìèçàöèÿ. Â îñíîâíîì ìû áóäåì ãîâîðèòü î òðåõ íàèáîëååïîïóëÿðíûõ êîìïèëÿòîðàõ � GCC 3.3.4, Intel C++ 8.0 è Microsoft Visual C++ 6.0, ê êîòîðûìòåïåðü ïðèñîåäèíèëñÿ è GCC 4.0.0 ñî ñâîèì íîâûì îïòèìèçàòîðîì öèêëîâ.

Page 81: 029 Системный Администратор 04 2005

79¹4, àïðåëü 2005

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

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

Компактные циклы вида:

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

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

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

Компилятор icl разворачивает только циклы for по сце-нарию больший размер – большая скорость. Причем цик-лы с заранее известным количеством итераций:

где const <= 32 трансформируются в линейный код, и циклкак таковой при этом исчезает (см. раздел «Шелушениециклов»). Как следствие – размер программы существен-но возрастает, а вместе с ним возрастает и риск «выле-теть» за пределы кэша первого уровня, после чего произ-водительность упадет так, что не поднимешь и домкратом.Если const >32, цикл разворачивается на количество ите-раций, кратное const, но не более 16, при этом компиляторучитывает число инструкций в теле цикла – более компак-тные циклы разворачиваются на большее число итераций.

Циклы, количество итераций которых компилятору не-известно:

всегда разворачиваются на 5 итераций, а оставшиеся (n % 5)итераций выполняются в отдельном неразвернутом цикле.Циклы с ветвлениями разворачиваются только при транс-формации в линейный код (при этом ветвления, естествен-но, исчезают):

преобразуется в:

Компилятор gcc по умолчанию не разворачивает циклыдаже на уровне оптимизации O3, и делает это только с клю-чом -funroll-all-loops, поддерживающим все виды циклов, ане только цикл for. Циклы с известным количеством итера-ций, где const <= 32 разворачиваются полностью, приconst > 32 – приблизительно на 4 итерации (точное значе-ние зависит от количества инструкций в теле цикла). Есливнутри цикла присутствуют одно или несколько ветвлений,при развороте они неизбежно дублируются, в результатечего производительность оказывается даже ниже, чем быладо оптимизации! Циклы с неизвестным количеством ите-раций не разворачиваются вообще. Для тонкой настройкисуществуют ключи max-unrolled-insns (максимальное коли-чество инструкций, при котором цикл еще может быть раз-вернут, и если он будет развернут, это значение определя-ет величину разворота), max-average-unrolled-insns (макси-мальное среднее количество инструкций, которое цикл мо-жет иметь после разворота) и max-unroll-times (максималь-ная степень разворота). Разворот по всех случаях выпол-няется по сценарию больший размер – большая скорость.

Итого:! msvc:

! не разворачивает никакие циклы.! icl:

! циклы с переменным количеством итераций разво-рачивает на 5 итераций;

! циклы с cost <= 32 разворачивает полностью;! циклы с const > 32 разворачивает на величину, крат-

ную const, но не больше 10h;! учитывает количество инструкций в цикле;! циклы разворачиваются по сценарию: больший раз-

мер – большая скорость.! gcc:

! на уровне O3 по умолчанию не разворачивает;! циклы с переменным количеством итераций никог-

да не разворачиваются;! циклы с постоянным количеством итераций разва-

риачиваются приблизительно на 4 итерации (но тутвсе зависит от числа инструкций).

Шелушение цикловИдея шелушения циклов (по-английски «peeling») заклю-чается в «сдирании» с цикла одной или нескольких итера-ций с последующей трансформацией в линейный код. Фак-тически шелушение циклов является частным случаем раз-

Ëèñòèíã 1. Öèêë  äî  ðàçâîðîòàfor(i=1;  i<n;i+)

k += (n % i);Ëèñòèíã 2. Öèêë ïîñëå ðàçâîðîòà (áîëüøèé ðàçìåð � áîëüøàÿñêîðîñòü)// ðàçâîðîò öèêëà íà 4 èòåðàöèè// âûïîëíÿåì ïåðâûå n � (n % 4) èòåðàöèéfor(i=1;  i<n;i+=4){

k += (n % i) + \(n % i+1) + \(n % i+2) + \(n % i+3);

}// âûïîëíÿåì îñòàâøèåñÿ èòåðàöèèfor(i-=4; i<n;i++) k += (n % i);Ëèñòèíã 3. Öèêë ïîñëå ðàçâîðîòà (ìåíüøèé ðàçìåð, ìåíüøàÿñêîðîñòü � ìàøèííîå ïðåäñòàâëåíèå i++ íàìíîãî áîëååêîìïàêòíî, ÷åì i+const, îäíàêî åñëè âûðàæåíèÿ�(n % i+const_1) + (n % i+const_2) � ìîãóò âûïîëíÿòüñÿîäíîâðåìåííî, òî �(n % i++) + (n % i++)� âû÷èñëÿþòñÿïîñëåäîâàòåëüíî, ïîñêîëüêó ñîäåðæàò çàâèñèìîñòü ïî äàííûì)for(i=1;  i<(n-3);){

k += (n % i++) + \(n % i++) + \(n % i++) + \(n % i++);

}for(;i<n;i++) k += (n % i);

for(a=0;a<n;a++) *dst++= *src++;

for(a=0;a<const;a++)

for(a=0;a<n;a++)

for  (a=0; a<3;a++) if (a%2) x[a]++; else x[a]--;

x[0]--; x[1]++; x[2]--;

Page 82: 029 Системный Администратор 04 2005

80

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

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

Рассмотрим следующий код:

Чтобы объединить оба цикла в один (см. раздел «Объе-динение циклов»), необходимо «содрать» с цикла j одну«лишнюю» итерацию:

Компилятор msvc шелушить циклы не умеет, icl и gcc –умеют, но особой радости от этого никто не испытывает,поскольку они никогда не комбинируют шелушение с дру-гими приемами оптимизации, что практически полностьюего обесценивает. А вот компиляторы от SUN или Hewlett-Packard – комбинируют!

Компилятор gcc содержит специальный ключ -fpeel-loops, полностью разворачивающий циклы с небольшим ко-личеством итераций. Пороговое значение назначается клю-чами: max-peel-times (сколько итераций можно сдирать содного цикла), max-completely-peel-times (максимальное ко-личество итераций цикла, который еще может быть раз-вернут), max-completely-peeled-insns (максимальное коли-чество инструкций, при которых цикл еще может быть раз-вернут) и max-peeled-insns (максимальное количество ин-струкций развернутого цикла).

Итого:! msvc – не шелушит.! gcc – шелушит.! icl – шелушит.

Фальцевание цикловФальцевание циклов (fold loops) внешне очень похоже наразворот, но преследует совсем другие цели, а именно: уве-личение количества потоков данных на одну итерацию. Чемвыше плотность (strength) потоков, тем выше параллелизмобработки данных, а, значит и скорость выполнения цикла.

Рассмотрим следующий пример:

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

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

Итого:! msvc – фальцует.! gcc – фальцует.! icl – фальцует.

ВекторизацияНачиная с Pentium MMX, в x86-процессорах появилась под-держка векторных команд (они же «мультимедийные коман-ды»). К сожалению, в ANSI C векторные операции отсут-ствуют, а нестандартные языковые расширения создаютпроблему переносимости, поэтому вся забота по вектори-зации циклов ложится на компилятор. Он должен проана-лизировать исходный код и определить, какие операциимогут выполняться параллельно, а какие нет.

Допустим, исходный цикл выглядел так:

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

Старшие представители процессоров Pentium могут об-рабатывать до 8 порций данных параллельно, и если N пре-вышает это число, приходится поступать так:

Однако эта методика срабатывает далеко не всегда. Вотпример цикла, который нельзя векторизовать:

Поскольку последующая ячейка (a[i]) вычисляется на ос-нове предыдущей (a[i-1]), данные не могут обрабатыватьсяпараллельно.

Компилятор msvc не поддерживает векторизацию, а icl

Ëèñòèíã 6. Íåîïòèìèçèðîâàííûé âàðèàíò � îäèí ïîòîê äàííûõíà èòåðàöèþfor(i=0; i<XXL; i++)

sum += a[i];

Ëèñòèíã 7. Îïòèìèçèðîâàííûé  âàðèàíò �  ÷åòûðå  ïîòîêàäàííûõ íà èòåðàöèþfor(i=0; i<XXL; i += 4)

Ëèñòèíã 4. Êàíäèäàò  íà  îïòèìèçàöèþfor(i=0; i<n; i++)

a[i] = b[i] + 1;for(j=0; j<n+1; j++)

c[j] = d[j] � 1;

Ëèñòèíã 5. Îïòèìèçèðîâàííûé  âàðèàíòfor(i = 0; i < n; i++){

a[i] = b[i] + 1;c[i] = d[i] - 1;

}c[i] = d[i] - 1;

{sum += a[i];sum += a[i+1];sum += a[i+2];sum += a[i+3];

}for (i -= 4; i<XXL; i++)

sum += a[i];

Ëèñòèíã 8. Öèêë  äî  âåêòîðèçàöèèfor(i=0; i<XXL; i++)

a[i] += b[i];

Ëèñòèíã 9. Òîò æå öèêë, çàïèñàííûé â âåêòîðíîé íîòàöèèa[0:N] = a[0:N] + b[0:N];

Ëèñòèíã 10. Öèêë  ïîñëå  âåêòîðèçàöèè// îáðàáàòûâàåì ïåðâûå (N-N%VF) ÿ÷ååê âåêòîðíûì ñïîñîáîì// VF �êîëè÷åñòâî ïîðöèé äàííûõ, êîòîðûå ïðîöåññîð áóäåò// îáðàáàòûâàòü çà îäèí ðàçfor (i=0; i<XXL; i+=VF)

a[i:i+VF] = a[i:i+VF] + b[i:i+VF];// îáðàáàòûâàåì îñòàâøèéñÿ «õâîñò» îáû÷íûì ñïîñîáîìfor (i -= VF ; i < XXL; i++)

a[i] = a[i] + b[i];

Ëèñòèíã 11. Öèêë, êîòîðûé íåëüçÿ âåêòîðèçîâàòüfor (i=1; i<XXL; i++)

a[i] = a[i-1] + b[i];

Page 83: 029 Системный Администратор 04 2005

81¹4, àïðåëü 2005

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

поддерживает, но задействует ее только в том случае, еслиуказан ключ -ax. Компилятор gcc поддерживает векториза-цию только начиная с версии 3.4.3, да и то если присут-ствует флаг -ftree-vectorize.

Итого:! msvc – не векторизует.! icl – векторизует.! gcc – векторизует начиная с версии 3.4.3.

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

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

Поскольку зависимость по данным отсутствует, циклможно разбить на два. Первый будет обрабатывать ячейкиот 0 до XXL/2, а второй – от XXL/2 до XXL. Тогда на двух-процессорной машине скорость выполнения цикла практи-чески удвоится. А если еще учесть, что многопроцессор-ные машины, как правило, имеют MMX-команды, да исполь-зовать векторизацию...

Компилятор icl – единственный из всех трех, способныйна «параллелизацию» циклов. Чтобы ее задействовать, ис-пользуйте ключ –parallel, только помните, что при выполне-нии кода на однопроцессорных машинах, оптимизация даетобратный эффект (накладные расходы на организациюпотоков дают о себе знать).

Итого:! msvc – автопараллелизм не поддерживается.! icl – автопараллелизм поддерживается.! gcc – автопараллелизм не поддерживается.

Программная конвейеризацияРазворот цикла традиционными методами (см. раздел «Раз-матывание циклов») порождает зависимость по данным.

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

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

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

Итого:! msvc – программная конвейеризация не поддерживает-

ся.! icl – программная конвейеризация не поддерживается.! gcc – программная конвейеризация частично поддер-

живается.

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

Рассмотрим следующий пример:

Очевидно, что конечное значение sum равно:

Компилятор msvc всегда пытается предвычислить зна-

Ëèñòèíã 14. Îïòèìèçèðîâàííûé  âàðèàíò// îáðàáàòûâàåì ïåðâûå XXL � (XXL % 4) èòåðàöèéfor(i=0;  i<XXL;i+=4){

sum_1 += a[i+0];sum_2 += a[i+2];sum_3 += a[i+3];sum_4 += a[i+4];

}// îáðàáàòûâàåì îñòàâøèéñÿ «õâîñò»for(i-=XXL;  i<XXL;i++)

sum += a[i];// ñêëàäûâàåì âñå âîåäèíîsum += sum_1 + sum_2 + sum_3 + sum_4;

Ëèñòèíã 15. Èíäóêòèâíûé  öèêë  äî  îïòèìèçàöèèfor (i=0; i<XXL; i++)

sum++;

Ëèñòèíã 16. Èíäóêòèâíûé  öèêë  ïîñëå  îïòèìèçàöèèsum += XXL;

Ëèñòèíã 12. Íåîïòèìèçèðîâàííûé  âàðèàíòfor (i=0; i<XXL; i++)

a[i] = a[i] + b[i] * c[i];

Ëèñòèíã 13. Îïòèìèçèðîâàííûé  âàðèàíò/* ïîòîê A */for (i=0; i<XXL/2; i++)

a[i] = a[i] + b[i] * c[i];/* ïîòîê B */for (i=XXL/2; i<XXL; i++)

a[i] = a[i] + b[i] * c[i];

Page 84: 029 Системный Администратор 04 2005

82

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

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

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

Итого:! msvc – предвычисляет некоторые индуктивные циклы.! icl – не предвычисляет индуктивные циклы.! gcc – не предвычисляет индуктивные циклы.

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

Выражение (a[i]=x) не может быть выполнено до тех пор,пока не будет вычислено (x+=2), а оно в свою очередь дол-жно дожидаться завершения предыдущей итерации. Индук-ция однако! От нее можно избавится, вычисляя значениеn-ой итерации на «лету»:

Расплатой за отказ от индукции становится появление«лишней» инструкции умножения, однако накладные рас-ходы на ее выполнение с лихвой окупаются конвейериза-цией (а при желании и векторизацией!) цикла. Такая техни-ка оптимизации называется «разбивка длинных цепочекзависимостей» (breaks long dependency chains) и реализо-вана только в gcc, начиная с версии 4.0 (за это отвечаетключ -fsplit-ivs-in-unroller), а все остальные рассматривае-мые компиляторы на это, увы, не способны.

Итого:! msvc – не разбивает длинные цепочки зависимостей.! icl – не разбивает длинные цепочки зависимостей.! gcc – разбивает длинные цепочки зависимостей.

Устранение хвостовой рекурсииХвостовой рекурсией (tail recursion) называется такой типрекурсии, при котором вызов рекурсивной функции следу-ет непосредственно за оператором return.

Классическим примером может служить алгоритм вы-числения факториала:

Вызов функции – достаточно «дорогостоящая» опера-ция, и от него лучше избавиться. Это легко! Хвостовая ре-курсия легко трансформируется в цикл. Смотрите:

Компиляторы msvc и gcc всегда разворачивают хвосто-вую рекурсию в цикл, а вот icl этого делать не умеет.

Итого:! msvc – устраняет хвостовую рекурсию.! icl – не устраняет хвостовую рекурсию.! gcc – устраняет хвостовую рекурсию.

Объединение цикловНесколько циклов с одинаковым заголовком могут бытьобъединены в один, что сокращает накладные расходы наего организацию. Эта методика имеет множество назва-ний – loops fusion, merge loops, jam loops, создающих боль-шую путаницу и вводящих программистов в заблуждение.В действительности же это не три различные стратегии оп-тимизации, а всего одна, но какая! Продемонстрируем еена следующем примере:

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

А вот более сложный пример:

Непосредственно объединить циклы невозможно, по-скольку цикл j на одну итерацию короче. Чтобы уравнятьоба заголовка в правах, предварительно необходимо «со-драть» (см. «loop peeling» фирменного руководства) с цик-ла i одну итерацию:

Ëèñòèíã 18. Èíäóêòèâíûé  öèêë  ïîñëå  îïòèìèçàöèèfor(i=0;i<XXL;i++){

a[i] = i*2 + x;}

Ëèñòèíã 17. Èíäóêòèâíûé  öèêë  äî  îïòèìèçàöèèfor(i=0;i<XXL;i++){

x += 2;a[i] = x;

}

Ëèñòèíã 19. Õâîñòîâàÿ  ðåêóðñèÿ  äî  îïòèìèçàöèèint fact(int n, int result){

if(n == 0){

return result;}else{

return fact(n - 1, result * n);}

}

Ëèñòèíã 20. Õâîñòîâàÿ  ðåêóðñèÿ  ïîñëå  îïòèìèçàöèèfor(i=0; i<n; i++)

result *= n;

Ëèñòèíã 21. Öèêëû  äî  îáúåäèíåíèÿ  (íåîïòèìèçèðîâàííûéâàðèàíò)for(i=0; i<XXL; i++)

a[i] = b[i] + 1;for(j=0; j<XXL; j++)

d[j] = ó[j] -1;

Ëèñòèíã 22. Öèêëû  ïîñëå  îáúåäèíåíèÿ  (îïòèìèçèðîâàííûéâàðèàíò)for(i = 0; i < XXL; i++){

a[i] = b[i] + 1;d[j] = ó[j] -1;

}

Ëèñòèíã 23. Êàíäèäàò íà îïòèìèçàöèþ ïóòåì îáúåäèíåíèÿfor(i=0; i<XXL; i++)

a[i] = b[i] + 1;for(j=0; j<XXL-1; j++)

d[j] = ó[j] -1;

Page 85: 029 Системный Администратор 04 2005

83¹4, àïðåëü 2005

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

Документация на компилятор icl утверждает: объедине-ние циклов как будто бы поддерживается (см. главу «looptransformation» фирменного руководства), однако дизассем-блирование показывает, что это не так. Остальные компи-ляторы объединение циклов также не выполняют.

Итого:! msvc – не объединяет циклы.! icl – не объединяет циклы.! gcc – не объединяет циклы.

Разматывание цикловРазматывание циклов (loop spreading) представляет собойразновидность шелушения, при котором «содранные» ите-рации упаковываются в самостоятельный цикл, что бываетполезным, например, при объединении двух циклов с «раз-нополыми» заголовками.

Рассмотрим следующий код:

Если n не равно m, полное объединение циклов i и j уженевозможно, но min(n,m) итераций мы все же можем объе-динить:

Ни msvc, ни icl, ни gcc способностью к «разматыванию»циклов не обладают, однако это умеют делать, например,компиляторы от Hewlett-Packard.

Итого:! msvc – не разматывает циклы.! icl – не разматывает циклы.! gcc – не разматывает циклы.

Расщепление цикловРасщепление циклов (loop distribution, loop fission, loopsplitting…) прямо противоположно их объединению. К тако-му трюку прибегают в тех случаях, когда оптимизируемыйцикл содержит слишком много данных. Ассоциативностькэш-памяти первого уровня у большинства x86-процессо-ров равна четырем, реже – восьми, а это значит, что каж-дая обрабатываемая ячейка данных может претендоватьлишь на одну из четырех (восьми) возможных кэш-линеек

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

Рассмотрим следующий пример:

Чтобы сократить количество потоков данных, следуетвынести выражение (c[j] = 0) в отдельный цикл, переписавкод так:

Компилятор icl именно так и поступает, снимая это бре-мя с плеч программиста.

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

Итого:! msvc – не расщепляет циклы.! icl – расщепляет циклы.! gcc – не расщепляет циклы.

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

Возьмем произвольный цикл:

В общем случае стратегия нормализации выглядит так:

Ëèñòèíã 27. Íåîïòèìèçèðîâàííûé  âàðèàíòfor(j = 0; j < n; j++){

c[j] = 0;for(i = 0; i<m; i++)

a[j][i] = a[j][i] + b[j][i] * c[j];}

Ëèñòèíã 28. Îïòèìèçèðîâàííûé  âàðèàíòfor(j = 0; j < n; j++)

c[j] = 0;for(i=0; i<m; i++)

for(j = 0; j < n; j++)a[j][i] = a[j][i] + b[j][i] * c[j];

Ëèñòèíã 29. Íåíîðìàëèçîâàííûé  öèêëfor (i = lower; i < upper; i+=(-incre)){

// òåëî öèêëà}

Ëèñòèíã 30. Íîðìàëèçîâàííûé  öèêëfor (NCL = 0; i < (upper - lower + incre)/incre - 1; 1){

Ëèñòèíã  24. Îïòèìèçèðîâàííûé  âàðèàíòfor(i = 0; i < XXL; i++){

a[i] = b[i] + 1;d[i] = ó[i] -1;

} a[i] = b[i] + 1;

Ëèñòèíã 25. Äâà öèêëà ñ ðàçëè÷íûì êîëè÷åñòâîì èòåðàöèé(íåîïòèìèçèðîâàííûé  âàðèàíò)for(i=0; i<n; i++;)

a[i] = a[i] + c;for(j=0; j<m; j++;)

s[j] = s[j] + s[j+1];

Ëèñòèíã 26. ×àñòè÷íîå  îáúåäèíåíèå  öèêëîâ  ïóòåì«ðàçìàòûâàíèÿ»  (îïòèìèçèðîâàííûé  âàðèàíò)for(i=0; i<min(n,m); i++;){

a[i] = a[i] + c;s[i] = s[i] + s[i+1];

}for(i = min(n,m); i<max(n,m); i++;)

s[i] = s[i] + s[i+1];

Page 86: 029 Системный Администратор 04 2005

84

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

Легко показать, что нормализация дает выигрыш толь-ко на циклах с заранее известным количеством итераций,позволяющих вычислить значение выражения (upper lower +incre)/incre еще на стадии компиляции.

Все три рассматриваемых компилятора поддерживаютнормализацию циклов (см. раздел «loop normalization» в до-кументации на icl и описание ключа -fivcanon компилятораgcc), но не всегда ею пользуются.

Рассмотрим следующий пример:

Очевидно, что его можно нормализовать, избавляясь отоперации вычитания в выражении (i-1):

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

Итого:! msvc – нормализует некоторые циклы.! icl – нормализует некоторые циклы.! gcc – нормализует некоторые циклы.

Масштабирование цикловМасштабированием (scaling) в общем случае называетсяумножение индекса массива на некоторое, как правило,целочисленное значение, например, x = a[4*i]. Идея масш-табирования циклов заключается в выносе множителя в ин-дуктивный инкремент счетчика цикла.

Допустим, исходный цикл выглядел так:

После масштабирования он приобретает следующийвид:

В времена XT/AT такая оптимизация еще имела смысл,но начиная с 80386, в процессорах появилась аппаратнаяподдержка масштабирования на 2х, 4х, 8х и с некоторымиограничениями на 3х, 5х и 9х, поэтому масштабировать та-кие циклы уже не нужно.

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

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

Итого:! msvc – масштабирует некоторые циклы.! icl – масштабирует некоторые циклы.! gcс – масштабирует некоторые циклы.

Замена циклов с предусловиемна циклы с постусловиемЦиклы с предусловием (for, while) содержат по меньшеймере на одно ветвление больше, чем аналогичные им цик-лы с постусловием. Как нетрудно сообразить – в конце цик-ла с предусловием находится безусловный переход, воз-вращающий управление в начало, а в цикле с постуслови-ем передача управления по «совместительству» еще вы-полняет и проверку условия.

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

Итого:! msvc – заменяет циклы с предусловием на циклы с по-

стусловием.! icl – заменяет циклы с предусловием на циклы с постус-

ловием.! gcc – заменяет циклы с предусловием на циклы с по-

стусловием.

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

Рассмотрим следующий код:

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

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

i = incre*NLC + lower;// òåëî öèêëà

}i =  incre * _max((upper - lower + incre)/incre, 0) + lower;

Ëèñòèíã 35. Íåîïòèìèçèðîâàííûé  âàðèàíòfor(i=0; i<n; i++) printf("hello!\n");

Ëèñòèíã 36. Íåîïòèìèçèðîâàííûé  âàðèàíòfor(i=0;i<n;  i++)  sum+=a[i];

Ëèñòèíã 37. Îïòèìèçèðîâàííûé  âàðèàíòi=n; do{

sum+=*a;a++;

} while(--i);

Ëèñòèíã 31. Íåíîðìàëèçîâàííûé  öèêëint i, x[10];for(i=1; i<10; i++)

x[i]=i-1;

Ëèñòèíã 32. Íîðìàëèçîâàííûé  öèêëint i, x[10]; int *p; p = &x[1];for(i=0; i<9; i++)

p[i]=i;

Ëèñòèíã 33. Èñõîäíûé  öèêë  (íåîïòèìèçèðîâàííûé  âàðèàíò)for(i=0; i < XXL; i++)

a[4*i]= b[i];

Ëèñòèíã 34. Öèêë  ïîñëå  ìàñøòàáèðîâàíèÿ  (îïòèìèçèðîâàííûéâàðèàíò)for(i=0; i < 2*XXL; i+=2)

a[i]= *b++;

Page 87: 029 Системный Администратор 04 2005

85¹4, àïðåëü 2005

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

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

Итого:! msvc – всегда устремляет циклы к нулю.! icl – никогда не устремляет циклы к нулю.! gcc – устремляет некоторые циклы к нулю.

Отказ от branch-count-regМногие микропроцессоры имеют специальную команду:«уменьши-регистр-на-единицу-и-ветвись-если-нуль» (branch-count-reg). На x86-процессорах этим занимается LOOP, ча-сто встречающаяся в ассемблерных вставках начинающихпрограммистов, но практически никогда в коде, сгенериро-ванном компилятором. И вовсе не потому, что компилятор«тупой», а потому, что эта инструкция медленная, хотя икомпактная.

Компиляторы msvc и icl никогда ее не используют, а gccпредоставляет специальный ключ -fbranch-count-reg, пред-писывающий выбирать LOOP вместо DEC reg/JNZ begin_loop,(см. раздел «Стремление циклов к нулю»), правда, до ма-шинного она все равно не доживает и уничтожается опти-мизатором.

Итого:! msvc – не использует branch-count-reg.! icl – не использует branch-count-reg.! gcc – не использует branch-count-reg.

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

Покажем это на следующем примере:

Поскольку ветвление if (n < 0x669) инвариантно по от-ношению к циклу j, мы от него избавляемся:

На суперкомпьютерных компиляторах такая техника оп-тимизации используется уже давно и называется loop

promotion, loop interchange или loop unswitching, но на PCона впервые появилась только в последней версии компи-лятора gcc. Этим заведует ключ -funswitch-loops (задейство-вать вынос инвариантных ветвлений), max-unswitch-insns(максимальное количество инструкций, которое можетиметь «расщепляемый» цикл) и max-unswitch-level (макси-мальное количество инвариантных ветвлений, которые мо-жет иметь «расщепляемый цикл»).

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

Итого:! msvc – не выносит инвариантные ветвления.! icl – не выносит инвариантные ветвления.! gcc – выносит инвариантные ветвления, начиная с вер-

сии 3.4.3.

Ротация ветвленийБесконечные циклы с выходом по break могут быть преоб-разованы в конечные циклы с постусловием. При этом телоцикла как бы прокручивается, чтобы оператор break пере-местился на место while(1), а сам while(1) сомкнулся с опе-ратором do и «коллапсировал».

Продемонстрируем это на следующем примере:

После ротации ветвлений наш код будет выглядеть так:

Из всех трех рассматриваемых компиляторов удалятьлишние ветвления умеет лишь один msvc.

Итого:! msvc – выполняет ротацию ветвлений.! icl – не выполняет ротацию ветвлений.! gcc – не выполняет ротацию ветвлений.

Упорядочение обращений к памятиПри обращении к одной-единственной ячейке памяти в кэшпервого уровня загружается целая строка, длина которой взависимости от типа процессора варьируется от 32 до 128или даже 256 байт, поэтому большие массивы выгоднеевсего обрабатывать по строкам, а не по столбцам. К сожа-

Ëèñòèíã 40. Íåîïòèìèçèðîâàííûé  âàðèàíòdo{

printf("1é  îïåðàòîð  öèêëà\n");if (--a<0) break;printf("2é  îïåðàòîð  öèêëà\n");

} while(1);

Ëèñòèíã 41. Îïòèìèçèðîâàííûé  âàðèàíò// äóáëèðóåì îïåðàòîðû öèêëà, ðàñïîëîæåííûå äî breakprintf("1-é  îïåðàòîð  öèêëà\n");a--;// à äîëæåí ëè âîîáùå âûïîëíÿòüñÿ îñòàòîê öèêëà?if (a>=0){

a++;do{

// ïîñëå òðàíñôîðìàöèè âòîðîé îïåðàòîð// ñòàë ïåðâûìprintf("2-é  îïåðàòîð\n");// �à ïåðâûé îïåðàòîð � âòîðûìprintf("1-é  îïåðàòîð  öèêëà\n");

} while(�-a<0); // ñþäà ïîïàëî óñëîâèå èç if - break}

Ëèñòèíã 38. Öèêë  ñ  èíâàðèàíòíûì  âåòâëåíèåì(íåîïòèìèçèðîâàííûé  âàðèàíò)for (i = 0; i < n; i++){

for (j = 0; j < n; j++){

if (flag < 0x669) a[i][j]=i+j; else a[i][j]=0;}

}

Ëèñòèíã 39. Îïòèìèçèðîâàííûé  âàðèàíòif (flag < 0x669)

for (i = 0; i < n; i++)for (j = 0; j < n; j++)

a[i][j]=i+j;else

for (i = 0; i < n; i++)for (j = 0; j < n; j++)

a[i][j]=0;

Page 88: 029 Системный Администратор 04 2005

86

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

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

Здесь три массива обрабатываются по столбцам, чтокрайне непроизводительно и для достижения наивысшейэффективности циклы i и j следует поменять местами. Ус-тоявшегося названия у данной методики оптимизации нет,и в каждом источнике она называется по-разному: looppermutation/interchange/reversing, rearranging array dimensionsи т. д. Как бы там ни было, результирующий код выглядиттак:

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

А вот компиляторы от Hewlett-Packard оптимизируютэтот цикл так (хвост цикла для простоты не показан):

Òàáëèöà1. Ñâîáîäíàÿ òàáëèöà êà÷åñòâà îïòèìèçàöèè

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

Итого:! msvc – частично упорядочивает обращения к памяти.! icl – частично упорядочивает обращения к памяти.! gcc – частично упорядочивает обращения к памяти.

ЗаключениеПрогресс не стоит на месте, и со времени появления msvcкомпиляторы сделали большой шаг вперед. Особенно по-радовал gcc 4.0.0 с его новым оптимизатором циклов, ко-торый намного превосходит icl и msvc вместе взятые. Темне менее до совершенства ему еще далеко. Некоторые тех-ники, присутствующие еще в msvc, в нем не реализованы(например, ротация ветвлений), не говоря уже про «серь-езные» компиляторы от Hewlett-Packard. Так что на компи-лятор надейся, а сам не плошай!

Ëèñòèíã 42. Îáðàáîòêà  ìàññèâîâ  ïî  ñòîëáöàì(íåîïòèìèçèðîâàííûé  âàðèàíò)for(j=0;j<m;j++)

for(i=0;i<n;i++)a[i][j] = b[i][j] + c[i][j];

Ëèñòèíã 43. Îáðàáîòêà  ìàññèâîâ  ïî  ñòîëáöàì(îïòèìèçèðîâàííûé  âàðèàíò)for(i=0;i<n;i++)

for(j=0;j<m;j++)a[i][j] = b[i][j] + c[i][j];

Ëèñòèíã 44. Ñëîæíûé ñëó÷àé îáðàáîòêè äàííûõ ïî ñòîëáöàìfor (i=0; i<n; i++)

for (j=0; j<n; j++)for (k=0; k<n; k++)

a[j][i] = a[j][i] + b[k][i] * c[j][k];

Ëèñòèíã 45. Îïòèìèçèðîâàííûé âàðèàíò ñ ðàçâîðîòîì íà 4èòåðàöèè (îáðàòèòå âíèìàíèå, êàêîé öèêë áûë ðàçâåðíóò!)for(i=0; i<n; i+=4){

for (j=0; j<n; j++){

for (k=0; k<n; k++){

a[j][i] = a[j][i] + b[k][i] * c[j][k];a[j][i+1] = a[j][i+1] + b[k][i+1] * c[j][k];a[j][i+2] = a[j][i+2] + b[k][i+2] * c[j][k];a[j][i+3] = a[j][i+3] + b[k][i+3] * c[j][k];

}}

}

Page 89: 029 Системный Администратор 04 2005

bugtraq

87¹4, àïðåëü 2005

Межсайтовый скриптингв Oracle Reports ServerПрограмма: Oracle Reports Server 10g (9.0.4.3.3).Опасность: Низкая.Описание: Уязвимость позволяет удаленному пользовате-лю произвести XSS-нападение и получить доступ к потен-циально важным данным других пользователей.

Уязвимость существует из-за некорректной фильтрациивходных данных в демонстрационном сценарии test.jsp. Уда-ленный пользователь может с помощью специально сфор-мированного URL выполнить произвольный HTML-сценарийв браузере жертвы. Пример:

URL производителя: http://www.oracle.com.Решение: Способов устранения уязвимости не существу-ет в настоящее время.

http://[target]/reports/examples/Tools/test.jsp?  ↵↵↵↵↵repprod&desname='&lt;script&gt;  ↵↵↵↵↵alert(document.cookie);&lt;/script&gt;

http:  //[target]/reports/examples/Tools/test.jsp?  ↵↵↵↵↵repprod"&lt;script;&gt;alert(document.cookie);  ↵↵↵↵↵&lt;/script&gt;

Отказ в обслуживаниив продуктах SymantecПрограмма: Symantec Norton System Works, SymantecNorton Internet Security, Symantec Norton AntiVirus версии2004, 2005.Опасность: Средняя.Описание: Уязвимость существует в модуле AutoProtect.Злоумышленник может специальным образом создать илиизменить файл и вызвать отказ в обслуживании системы.

Злоумышленник может потребить все возможные ресур-сы системы при включенной опции SmartScan. Программ-ное обеспечение некорректно обрабатывает переименова-ние файлов.URL производителя: www.symantec.com.Решение: Установите обновления от производителя.

Удаленное переполнение буферав telnet-клиенте на различныхплатформахПрограмма: telnet-клиент на многих UNIX-системах.Опасность: Средняя.Описание: Уязвимость обнаружена в функции slc_add_reply(). Злонамеренный telnet-сервер может послать клиен-ту большое количество специально сформированных LINE-MODE Set Local Character (SLC)-команд и вызвать перепол-нение буфера. Пример:

Уязвимость в функции env_opt_add() при обработкеescape-символов может позволить злонамеренному серве-ру вызвать переполнение буфера. Удаленный злонамерен-ный сервер может выполнить произвольный код на систе-ме клиента с привилегиями пользователя, запустившегоtelnet-приложение. Большинство клиентов на BSD-системахуязвимы.Решение: Установите обновления от производителя.

perl -e 'print "\377", "\372\42\3\377\377\3\3" x 43, ↵↵↵↵↵"\377\360"' | nc -l 23

Обход ограничений безопасностив Kerio Personal FirewallПрограмма: Kerio Personal Firewall 4.1.2 и более ранние вер-сии.Опасность: Низкая.Описание: Уязвимость существует из-за ошибки, котораяпозволяет злонамеренному процессу выдать себя за раз-решенное приложение. Удачная эксплуатация уязвимостипозволит злонамеренному процессу или локальномупользователю обойти правила ограничения межсетевогоэкрана и получить доступ к Интернету.URL производителя: www.kerio.com.Решение: Установите обновления от производителя.

Переполнение буфера при обработкеMIME-вложений в SylpheedПрограмма: Sylpheed 0.8.0 – 1.0.3.Опасность: Высокая.Описание: Уязвимость существует при обработке вложе-ния с зашифрованным в MIME-формате именем файла вe-mail-сообщении. Удаленный пользователь может создатьспециальным образом e-mail-сообщение и выполнить про-извольный код на целевой системе с привилегиями пользо-вателя, запустившего Sylpheed.URL производителя: sylpheed.good-day.net.Решение: Установите последнюю версию 1.0.4 от произ-водителя.

Отказ в обслуживании при обработкеSACK-опций в OpenBSDПрограмма: OpenBSD 3.5, 3.6.Опасность: Высокая.Описание: Уязвимость существует в файлах tcp_input.c иtcp_usrreq.c. Удаленный пользователь может послать сис-теме специально сформированные TCP-пакеты, содержа-щие некорректные SACK-опции, что приведет к ошибке вTCP-стеке. Атакующий может вызвать отказ в обслужива-нии системы.URL производителя: www.openbsd.org.Решение: Установите патчи от производителя.

Переполнение буферав Microsoft Jet databaseПрограмма: Microsoft Jet database msjet40.dll версия биб-лиотеки 4.00.8618.0.Опасность: Высокая.Описание: Уязвимость существует из-за недостаточной об-работки входных данных при обработке имен файлов базданных в компоненте msjet40.dll. Удаленный пользовательможет создать специальным образом .mdb-файл, которыйпри открытии его целевым пользователем выполнить про-извольный код на системе.URL производителя: www.microsoft.com.Решение: Способов устранения уязвимости не существу-ет в настоящее время.

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

Page 90: 029 Системный Администратор 04 2005

88

образование

Сегодня как никогда велик интерес к использованию сво-бодного ПО в учебных заведениях. Если к применению GNU/Linux, как признанного флагмана движения Open Source,на настольных системах предстоит еще пройти долгий путь,то на серверах положение не так плачевно. Энтузиасты ужедавно используют преимущества свободного ПО, остаетсятолько подобрать необходимые приложения, чтобы решитьвозникшие задачи.

OpenAdministrationforSchools – OpenAdmin (http://rich-tech.ca/openadmin/index.html) представляет собой свободныйOpen Source-проект, предназначенный для решения задачпо автоматизации учета, сбора и вывода информации, адап-тированный для применения в школах и других, в том чис-ле и высших учебных заведениях. Вся собранная инфор-мация сохраняется в базе данных, доступ к которой осуще-ствляется при помощи веб-сервера, поэтому OpenAdmin недиктует особых требований к клиентскому ПО. Во избежа-ние проблем с безопасностью для выдачи информации раз-личным группам пользователей используются раздельныевиртуальные веб-узлы. Так, каждая школа имеет по умолча-нию три веб-узла. Все они защищены паролем. Кроме того,учителя используют индивидуальный пароль на препода-вательском сайте, а устанавливаемые для удобства рабо-ты cookies имеют короткий период действия по умолчанию.Для доступа к данным на родительском и студенческомсайтах также используются индивидуальные логин и пароль.Отдельный виртуальный сайт может использоваться длявывода информации третьим лицам, что позволяет избежатьделегирования прав. При этом если преподаватели ведутотдельные курсы со своими программами, для их учета ис-пользуется отдельный сайт (iep). В дальнейшем планиру-ется полная поддержка https, но пока этим заниматься при-дется самому. Распространяется OpenAdmin по лицензииGNU GPL.

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

Итак, в настоящее время OpenAdmin позволяет хранитьи выводить по запросу следующую информацию:! Student Demographics – все необходимые сведения об

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

! Attendance System – сюда заносятся данные о посещае-мости, а точнее отсутствии учащихся на занятиях. По-зволяет отследить посещаемость ученика не только по

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

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

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

! Report Card System – гибкая система генерации отчетовс выводом до 20 сообщений в теме при неограниченномколичестве тем, кроме web может выводиться в файлформата PDF, что очень удобно при распечатывании.

! Parent Viewing – скрипты, позволяющие родителям про-сматривать результаты успеваемости, посещаемости иповедение своих чад.

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

Установка сервера OpenAdminСервер OpenAdmin полностью построен на основе свобод-ных компонентов. Все применяемые скрипты написаны наPerl, для хранения информации используется база данныхMySQL. В качестве веб-сервера может быть использованлюбой продукт, поддерживающий виртуальные узлы. Раз-работчиками рекомендуется Apache. Кроме этого, необхо-димо наличие LibXML2 (http://www.xmlsoft.org), OpenSSL(http://www.openssl.org), TeX и нескольких модулей Perl. Вбольшинстве дистрибутивов GNU/Linux все эти компонен-ты, как правило, уже имеются. Если же в качестве сервераиспользуется Windows, то придется позаботиться об их ин-сталляции.

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

СЕРГЕЙ ЯРЕМЧУКСЕРВЕР ДЛЯ ШКОЛ

Page 91: 029 Системный Администратор 04 2005

89¹4, àïðåëü 2005

образование

министрирования – в admin и cgi, преподавательский сайт –в tadmin и tcgi, родительский – в padmin и pcgi. При этом наодном веб-сервере можно одновременно разместить сай-ты нескольких школ, настройки этих серверов находятся вразных каталогах со структурой, описанной выше. Два сай-та sis (Student Information System) и iep предназначены дляспециального (централизованного) доступа ко всем инфор-мационным ресурсам. Так как все эти сайты находятся наодном сервере, то необходимо обеспечить разрешениеимен, прописав все узлы в файле /etc/hosts (что безопас-нее) или в настройках DNS-сервера.

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

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

Смотрим в файле веб-сервера Apache httpd.conf в стро-ках User и Group, от имени какого пользователя он работа-

ет, и устанавливаем его владельцем вновь созданных ка-талогов:

А для каталогов cgi устанавливаем права доступа в 755:

При необходимости можно установить логотип учебно-го заведения, заменив файл logo.gif и logotn.gif в подката-логе admin/images. Теперь можно приступить к созданиюнеобходимой базы данных.

Назначаем необходимые привилегии, чтобы не работатьот имени администратора.

И при помощи файла blank.sql, содержащего необходи-мые команды, создаем таблицы в нашей базе данных.

# mkdir /schools# cd /schools# cp /tmp/openadmin-1.70.tar.gz# tar xvzf openadmin-1.70.tar.gz

# mkdir 4school# cp -r /schools/school /schools/4schoo

# chown -R apache:apache /schools

# chmod 755 /schools/4school/cgi

# mysql -u root myschool -pEnter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 11 to server version: 3.23.58

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> grant all on myschool.* to school@localhost identifiedby 'schoolpasswd';

Query OK, 0 rows affected (0.01 sec)

mysql> quit

# mysql -p -u school myschool < /schools/utility/blank.sql

Page 92: 029 Системный Администратор 04 2005

90

образование

Если будет использована SIS, то в целях безопасностинеобходимо создать отдельного пользователя, обладающе-го правами только на выборку данных из таблиц школ(select). Специальный ресурс iep имеет свою структуру таб-лиц базы данных, для создания которых используются фай-лы iepdata.sql и iepstruct.sql.

Теперь об Apache. В конце файла httpd.conf имеется сек-ция «Virtual Hosts», в которой даны примеры и краткие ком-ментарии по настройке виртуальных веб-узлов. Фактическидля минимальной настройки необходимо будет создать триодинаковых секции, отличающиеся параметрами DocumentRoot, ServerName и ScriptAlias. Для учительского и админи-страторского сайта, кроме того, создаются разделы, огра-ничивающие доступ.

### Ïðîâåðüòå íàëè÷èå ýòèõ ñòðîêAddTypetext/html .shtmlAddHandler server-parsed .shtml### Section 3: Virtual HostsNameVirtualHost schools### Àäìèíèñòðàòîðñêèé ñàéò<VirtualHost schools> ServerAdmin [email protected] DocumentRoot /schools/4school/admin ServerName admin.schools.com ErrorLog logs/schools.error_log CustomLog logs/schools.access_log common ScriptAlias /cgi-bin "/schools/4school/cgi"</VirtualHost>### Îãðàíè÷èâàåì äîñòóï<Directory �/schools/4school/admin�>Authtype BasicAuthname Admin

AuthUserFile /usr/local/apache/private/admin4schoolOptions +Includes<Limit GET POST>require valid-user</Limit></Directory><Directory �/schools/4school/cgi�>Authtype BasicAuthname AdminAuthUserFile /usr/local/apache/private/admin4school<Limit GET POST>require valid-user</Limit></Directory></VirtualHost>### Ó÷èòåëüñêèé ñàéò<VirtualHost schools> ServerAdmin [email protected] DocumentRoot /schools/4school/tadmin ServerName teacher.schools.com ErrorLog logs/schools.error_log CustomLog logs/schools.access_log common ScriptAlias /cgi-bin "/schools/4school/tcgi"</VirtualHost>### Îãðàíè÷èâàåì äîñòóï<Directory �/schools/4school/tadmin�>Authtype BasicAuthname teacherAuthUserFile /usr/local/apache/private/teacher4schoolOptions +Includes<Limit GET POST>require valid-user</Limit></Directory><Directory �/schools/4school/tcgi�>Authtype BasicAuthname AdminAuthUserFile /usr/local/apache/private/admin4school<Limit GET POST>require valid-user</Limit>

Page 93: 029 Системный Администратор 04 2005

91¹4, àïðåëü 2005

образование

Теперь проверяем правильность новых настроек.

Создаем пароли для каждого пользователя.

Перезапускаем веб-сервер.

И наконец, последний этап. В подкаталогах cgi и tcgi име-ются файлы admin.conf, в которых необходимо изменить па-раметры для доступа к базе данных, расположение ката-логов администраторского и учительского серверов, мес-тонахождение утилиты pdflatex и почтовый адрес админис-тратора, который будет выводиться в случае ошибок. Вдальнейшем для упрощения настроек планируется исполь-зовать один такой файл, расположенный в /etc. При внима-

тельном подходе к чтению на данном этапе все три серве-ра должны работать. Единственная проблема, с которой выможете столкнуться, – это занесение в базу данных боль-ших объемов информации. Регистрация одного-двух десят-ков учеников – терпима, но если их число превышает не-сколько сотен, то этот процесс превратится в настоящийкошмар. Для удобства рекомендуется воспользоватьсяскриптом studentupload.pl, который находится в подкатало-ге utility. Этот скрипт считывает файл в формате CSV(Comma Separated Values) и заносит все сведения в базуданных. По умолчанию сценарий считывает 40 параметрови перед началом использования его необходимо подправитьпод свои требования. При работе скрипт не обновляет файлcgi/entry/studentnumber, в котором хранятся номера следую-щей записи, поэтому, чтобы не получились записи с одина-ковыми порядковыми номерами, цифру в нем необходимоподправить самому. Если все же это произошло, то в реше-нии проблемы могут помочь скрипты dupcheck.pl и sentry2.pl.

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

</Directory></VirtualHost>### Ðîäèòåëüñêî-ñòóäåí÷åñêèé ñàéò<VirtualHost schools> ServerAdmin [email protected] DocumentRoot /schools/4school/padmin ServerName parent.schools.com ErrorLog logs/schools.error_log CustomLog logs/schools.access_log common ScriptAlias /cgi-bin "/schools/4school/pcgi"</VirtualHost>

# apachectl configtestSyntax OK

# htpasswd /usr/local/apache/private/teacher4school physicist

# /etc/init.d/httpd restartОстанавливается httpd: [ ОК ]

Запускается httpd: [ ОК ]

Page 94: 029 Системный Администратор 04 2005
Page 95: 029 Системный Администратор 04 2005

93¹4, àïðåëü 2005

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

Профессиональноеруководство по SQLServer: хранимыепроцедуры, XML,HTMLКен ХендерсонКнига рассчитана на програм-мистов и разработчиков, кото-рые имеют представление оTransact-SQL и создании хра-нимых процедур. Ни для когоне секрет, что за счет грамот-ного использования хранимыхпроцедур происходит много-

кратное увеличение производительности приложения. Чтовходит в число освещенных тем? Непосредственно храни-мые процедуры, объекты (обработка ошибок, триггеры, пред-ставления), технологии HTML, XML, .NET, которые, как пра-вило, сопутствуют любой разработке, связанной с хранимы-ми процедурами. Особенно стоит отметить, что в книге рас-смотрены такие сложные темы, как отладка и профилирова-ние, автоматизация. Отдельная глава посвящена недокумен-тированным возможностям Transact-SQL. Достаточно инте-ресны размышления автора о производительности прило-жений. На прилагающемся диске вы найдете более 700 раз-личных SQL-сценариев, исходный код всех примеров из кни-ги, а также различные утилиты для разработчиков.Издательство «Питер», 2005 г. – 620 стр. ISBN 5-469-00046-X.

Основы построениятрансляторов.Учебное пособиеЮ.Г. КарповМатериал, изложенный в кни-ге, рассчитан прежде всего напреподавателей техническихвузов и студентов. Автор – ав-торитетнейший человек вэтой области – доктор техни-ческих наук, профессор, членАмериканского Математичес-кого общества с 1975 г. В кни-ге рассмотрены формальные

модели грамматик и языков, методы синтаксического ана-лиза формальных языков. Подробно рассмотрен вопрос ге-нерации кода в современных компиляторах, сети Петри.Особенно подробно рассмотрены такие темы, как поста-новка базовых проблем формальных языков, понимание ос-новных задач построения трансляторов. Отдельная главапосвящена грамматике Хомского. После прочтения книгичитатель получит знания, достаточные для проектированияи разработки транслятора с собственного несложного язы-ка. Нельзя не отметить большое количество примеров изадач к каждой главе, которые помогают наилучшим обра-зом усвоить прочитанный материал.Издательство «Питер», 2005 г. – 272 стр. ISBN 5-94157-285-9.

Антихакинг в сети.Трюки. 100профессиональныхпримеровЭндрю ЛокхартИздание является переводом«Network security hacks» изда-тельства O'Reilly. В книге со-держится описание 100 трю-ков, с помощью которых мож-но существенно повысить сте-пень защищенности вверен-ной вам сети. Затронуты ос-новные области безопасности:

защита узла UNIX, безопасность узла Windows, сетевая бе-зопасность, протоколирование, наблюдение и выявлениетенденций, защита каналов связи, обнаружение сетевоговторжения, восстановление и ответные действия. Достаточ-но подробно рассказано про создание VPN-сети, рассмот-рены различные межсетевые экраны, система обнаруженияатак Snort, и множество других, не менее интересных тем.Книга, по сути, является сборником статей, выполненных встиле mini-howto. Изложенный материал рассчитан на ши-рокий круг читателей, от новичков до системных админист-раторов с солидным стажем. Издание прежде всего следуетпорекомендовать всем без исключения администраторамUNIX/Linux-систем.Издательство «Питер», 2005 г. – 296 стр. ISBN 5-496-00385-x.

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

информационных систем, описаны типовые модели напа-дения, методики оценки рисков. Отдельная часть книги по-священа криптографии, в которой рассмотрена симметрич-ная и асимметричная криптография, рассказано о различ-ных криптографических протоколах. Подробно изложено ометодах защиты. В приложении вы можете найти примерыформатов различных административных документов. Пос-ле прочтения читатель приобретет знания, необходимые дляграмотного создания и обслуживания IT-инфраструктурыпредприятия. Книга хорошо систематизирована, излагае-мый материал написан простым и доступным языком и бу-дет полезным приобретением для системных и сетевых ад-министраторов.Издательство «Питер», 2005 г. – 752 стр. ISBN 5-94157-280-X.

Рубрику ведетАлександр Байрак

Page 96: 029 Системный Администратор 04 2005

bugtraq

94

Отказ в обслуживании в PHPв функции getimagesize()Программа: версии до 4.3.11 и 5.0.4.Опасность: Средняя.Описание: Уязвимость обнаружена в функциях php_handle_iff() и php_handle_jpeg(), доступных из функции getimage-size(). Функция getimagesize() используется для определе-ния размеров и разрешения изображений различных фор-матов: GIF, JPG, PNG, TIFF и т. д.

Отказ в обслуживании возможен в функции php_handle_iff() файла ext/standard/image.c из-за некорректной обработ-ки входного потока данных. Удаленный пользователь мо-жет создать специальным образом файл, указать размерравным -8, что заставит функцию зациклиться и приведетк потреблению всех возможных ресурсов на системе.

Уязвимость в функции php_handle_jpeg() существует из-за недостаточной обработки входных данных в заголовкахфайлов формата JPEG. Злоумышленник может создатьспециальным образом файл и заставить приложение по-треблять все возможные ресурсы на системе.URL производителя: www.php.net.Решение: Установите исправление от производителя.

Раскрытие важной информации в MozillaПрограмма: Mozilla 1.7.6 и более ранние версии, MozillaFirefox 1.0.2 и более ранние версии.Опасность: Средняя.Описание: Уязвимость обнаружена при обработке Javascript«lambda-выражений» в функции find_replen() файла js/src/jsstr.c. Удаленный пользователь может получить доступ кпотенциально важной информации на целевой системе.Пример/Эксплоит: http://cubic.xfo.org.ru/firefox-bug/index.html.URL производителя: www.mozilla.org.Решение: Установите обновление от производителя.

Удаленное переполнение буферав MailEnableПрограмма: MailEnable Enterprise 1.04 и более ранние вер-сии, MailEnable Professional 1.54 и более ранние версии.Опасность: Критическая.Описание: Уязвимость существует при обработке Unicode-символов в команде EHLO в SMTP-службе. MailEnable ин-терпретирует Unicode-символ как адрес в памяти и при по-пытке обратиться к нему аварийно завершает работу. По-добная уязвимость существует также IMAP-службе. Удален-ный пользователь может выполнить произвольный код на це-левой системе с привилегиями уязвимой службы. Пример:

URL производителя: www.mailenable.com.Решение: Установите обновление от производителя.

EHLO x99Отказ в обслуживаниив Computer Associates eTrust IntrusionDetection SystemПрограмма: Computer Associates eTrust Intrusion DetectionSystem 3.0.Опасность: Высокая.Описание: Уязвимость существует из-за недостаточной про-верки значений, передаваемых Microsoft Crypto API функцииCPImportKey. Большое количество данных приведет к гене-рации исключения и память не будет освобождена. Удален-ный пользователь может создать специально сформирован-ный пакет и потребить все доступные ресурсы на системе.URL производителя: http://www3.ca.com/Solutions/Pro-duct.asp?ID=163.Решение: Установите обновление от производителя.

Отказ в обслуживании в Сiscoпри использовании SSH+TACACSПрограмма: Сisco IOS 12.0S (SSH version 1), IOS 12.1T (SSHversion 1), IOS 12.2 (SSH version 1), IOS 12.2T (SSH version 1),IOS 12.3T (SSH version 2).Опасность: Средняя.Описание: Уязвимость позволяет удаленному пользовате-лю перегрузить устройство, если используется SSH-сервер2-й версии вместе с TACACS:! Если устройство сконфигурировано для авторизации

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

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

! Если логировние сообщений перенаправляется SSH-сессией с помощью команды terminal monitor, устрой-ству будут посылаться данные этой сессии, даже еслисессия уже завершена.

Утечка памяти возможна в процессе авторизации прииспользовании SSH версий 1 и 2. Удаленный пользовательможет вызвать отказ в обслуживании.URL производителя: www.cisco.com.Решение: Установите обновление от производителя.

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

Обход авторизации в реализацииIKE Xauth в CiscoПрограмма: Cisco 12.2T, 12.3, и 12.3T.Опасность: Средняя.Описание: Удаленный пользователь может послать специ-ально сформированный пакет на порт UDP 500 службы CiscoEasy VPN Server Xauth version 6, удачно закончить Xauth-аутентификацию и получить доступ к ресурсам сети. Дляудачной эксплуатации уязвимости атакующий должен знатьпубличный ключ группы для удачного завершения первойIKE-фазы.

Вторая уязвимость связана с некорректной обработкойISAKMP-профиля в Cisco 12.3(8)T, когда профиль присвоенпользователю, но атрибуты не обработаны. Удаленный не-авторизованный пользователь может досрочно начать 2-юфазу переговоров и удачно пройти аутентификацию.URL производителя: www.cisco.comРешение: Установите обновления с сайта производителя.

Page 97: 029 Системный Администратор 04 2005

95¹4, àïðåëü 2005

подписка на II полугодие 2005

Российская Федерация! Подписной индекс: 81655

Каталог агентства «Роспечать»! Подписной индекс: 87836

Объединенный каталог «Пресса России»Адресный каталог «Подписка за рабочим столом»Адресный каталог «Библиотечный каталог»

! Альтернативные подписные агентства:Агентство «Интер-Почта» (095) 500-00-60, курьерскаядоставка по МосквеАгентство «Вся Пресса» (095) 787-34-47Агентство «Курьер-Прессервис»Агентство «ООО Урал-Пресс» (343) 375-62-74

! Подписка On-linehttp://www.arzy.ruhttp://www.gazety.ruhttp://www.presscafe.ru

СНГВ странах СНГ подписка принимается в почтовых отделе-ниях по национальным каталогам или по списку номенкла-туры АРЗИ:! Азербайджан – по объединенному каталогу российских

изданий через предприятие по распространению печа-ти «Гасид» (370102, г. Баку, ул. Джавадхана, 21)

! Казахстан – по каталогу «Российская Пресса» черезОАО «Казпочта» и ЗАО «Евразия пресс»

! Беларусь – по каталогу изданий стран СНГ через РГО«Белпочта» (220050, г.Минск, пр-т Ф.Скорины, 10)

! Узбекистан – по каталогу «Davriy nashrlar» российскиеиздания через агентство по распространению печати«Davriy nashrlar» (7000029, Ташкент, пл.Мустакиллик,5/3, офис 33)

! Армения – по списку номенклатуры «АРЗИ» через ГЗАО«Армпечать» (375005, г.Ереван, пл.Сасунци Давида, д.2)и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул.Сарья-на, 22)

! Грузия – по списку номенклатуры «АРЗИ» через АО«Сакпресса» ( 380019, г.Тбилиси, ул.Хошараульская, 29)и АО «Мацне» (380060, г.Тбилиси, пр-т Гамсахурдия, 42)

! Молдавия – по каталогу через ГП «Пошта Молдавей»(МД-2012, г.Кишинев, бул.Штефан чел Маре, 134)по списку через ГУП «Почта Приднестровья» (МD-3300,г.Тирасполь, ул.Ленина, 17)по прайслисту через ООО Агентство «Editil Periodice»(2012, г.Кишинев, бул. Штефан чел Маре, 134)

! Подписка для Украины:Киевский главпочтампПодписное агентство «KSS»Телефон/факс (044)464-0220

Подписныеиндексы:

81655по каталогуагентства«Роспечать»

87836по каталогуагентства«ПрессаРоссии»

Page 98: 029 Системный Администратор 04 2005

96

СИСТЕМНЫЙ АДМИНИСТРАТОР№4(29), Апрель, 2005 год

РЕДАКЦИЯИсполнительный директорВладимир ПоложевецОтветственный секретарьНаталья Хвостова[email protected]Технический редакторВладимир ЛукинРедакторыАндрей БешковВалентин СиницынАлексей БарабановМихаил Платов

РЕКЛАМНАЯ СЛУЖБАтел./факс: (095) 928-8253Константин Меделянreс[email protected]

Верстка и оформление[email protected][email protected]Дизайн обложкиНиколай Петрочук

107045, г. Москва,Ананьевский переулок, дом 4/2 стр. 1тел./факс: (095) 928-8253Internet: www.samag.ru

РУКОВОДИТЕЛЬ ПРОЕКТАПетр ПоложевецУЧРЕДИТЕЛИВладимир ПоложевецАлександр Михалев

ИЗДАТЕЛЬЗАО «Издательский дом«Учительская газета»

Отпечатано типографиейГП «Московская Типография №13»Тираж 8400 экз.

Журнал зарегистрированв Министерстве РФ по делам печати,телерадиовещания и средств мас-совых коммуникаций (свидетельствоПИ № 77-12542 от 24 апреля 2002г.)

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

ЧИТАЙТЕВ СЛЕДУЮЩЕМНОМЕРЕ:

Уважаемые читатели!

Спешите оформить подпискуна второе полугодие 2005 года!

Приобрести новые и старые номера журналавы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.

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

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

Solaris 10 на рабочейстанцииК лету нынешнего года Sun Microsistemsобещает закончить открытие исходныхкодов своей новой операционной сис-темы Solaris 10. Исходники будут дос-тупны по лицензии CDDL на специаль-но созданном сайте. И хотя пока невоз-можно определенно сказать, насколь-

Решение проблемпроизводительностиMicrosoft SQL ServerMicrosoft SQL Server обладает большимнабором инструментов для анализа егосостояния и устранения узких мест впроизводительности. Однако часто бы-вает непонятно, как воспользоватьсяэтим богатством, когда сервер вдругначал работать медленно. В статье рас-сматриваются типичные причины паде-ния скорости работы Microsoft SQLServer 2000 и методы их диагностики иустранения.

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

Файловая система USF/FFSи ее восстановлениеФайловая система USF (равно как и еенаследница FFS) практически недоку-ментирована, и основным источникоминформации становятся исходные тек-сты и заголовочные файлы, в которыхдалеко не каждый с ходу сможет разоб-раться. Готовых утилит для восстанов-ления тоже нет. А ведь USF/FFS – этоосновная файловая система FreeBSD,под которой вращается множество сер-веров и рабочих станций. В масштабахсообщества FreeBSD разрушения дан-ных случаются постоянно. Хотите уз-нать, как противостоять энтропии? Тог-да читайте эту статью.

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