98
Роспечать – 81655 Пресса России – 87836 Интер-почта – тел. (095) 500-00-60 Так видит журнал читатель, который забыл оформить подписку: ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Так видит журнал читатель, оформивший подписку: НОВОГОДНИЕ КАНИКУЛЫ ЗАТЯНУЛИСЬ БЫСТРО РАСКУПИЛИ ТИРАЖ НЕОЖИДАННО ЗАКОНЧИЛИСЬ ДЕНЬГИ УЕХАЛ В ОТПУСК ПОСЛЕ ОТПУСКА АВРАЛ НА РАБОТЕ №7(32) июль 2005 №7(32) ИЮЛЬ 2005 подписной индекс 81655 www.samag.ru Настраиваем Kerberos поверх LDAP Настраиваем Kerberos поверх LDAP Open-Xchange – свободу группам! Open-Xchange – свободу группам! Есть ли жизнь Есть ли жизнь без антивируса? без антивируса? Запускаем spamd Запускаем spamd на FreeBSD на FreeBSD Проверяем Проверяем HTTP-трафик на лету HTTP-трафик на лету Настраиваем WSUS Настраиваем WSUS Устанавливаем связку Устанавливаем связку Postfix + Exchange Postfix + Exchange Удаленно управляем Удаленно управляем BIOS Setup BIOS Setup Автоматизируем подключение Автоматизируем подключение баз 1С новой версии 8.0 баз 1С новой версии 8.0

032 Системный Администратор 07 2005

Embed Size (px)

DESCRIPTION

Удаленно управляем Удаленно управляем BIOS Setup BIOS Setup Проверяем Проверяем HTTP-трафик на лету HTTP-трафик на лету №7(32) ИЮЛЬ 2005 подписной индекс 81655 www.samag.ru Устанавливаем связку Устанавливаем связку Postfix + Exchange Postfix + Exchange Настраиваем Kerberos поверх LDAP Настраиваем Kerberos поверх LDAP

Citation preview

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

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

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

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

НОВОГОДНИЕ

КАНИКУЛЫ

ЗАТЯ

НУЛИСЬ

БЫСТР

О РАСКУПИЛИ

ТИРА

Ж

НЕОЖ

ИДАННО

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

ЕНЬГИ

УЕХАЛ В

ОТП

УСК

ПОСЛЕ ОТП

УСКА

АВРАЛ Н

А РАБОТЕ

№7(

32)

июль

200

5

№7(32) ИЮЛЬ 2005подписной индекс 81655www.samag.ru

Настраиваем Kerberos поверх LDAPНастраиваем Kerberos поверх LDAP

Open-Xchange – свободу группам!Open-Xchange – свободу группам!

Есть ли жизньЕсть ли жизньбез антивируса?без антивируса?

Запускаем spamdЗапускаем spamdна FreeBSDна FreeBSD

ПроверяемПроверяемHTTP-трафик на летуHTTP-трафик на лету

Настраиваем WSUSНастраиваем WSUS

Устанавливаем связку Устанавливаем связку Postfix + ExchangePostfix + Exchange

Удаленно управляемУдаленно управляемBIOS SetupBIOS Setup

Автоматизируем подключение Автоматизируем подключение баз 1С новой версии 8.0баз 1С новой версии 8.0

1№7, июль 2005

оглавление

СОБЫТИЯ2

DansGuardian + ClamAV Фильтруем веб-содержимое и строим антивирусную защиту.

6

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

9

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

Запускаем spamd на FreeBSDТонкости настройки программы для эффективного бло-кирования спама.

14

Развертываем Heimdal KerberosИнфраструктура Kerberos в локальной сети.

Михаил Кондрин[email protected]

20

Настраиваем Kerberos поверх LDAP...… и получаем однородную информационную среду для аутентификации и авторизации пользователей в Linux.

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

26

Asterisk и Linux: миссия IP-телефонияДействие 2Как подключить Asterisk к обычной телефонной сети.

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

32

FreeBSD tips: работаем с TFTPДля некоторых задач возможности протокола FTP ока-зываются избыточными. Чтобы не тратить ресурсы на их поддержку, воспользуемся TFTP.

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

39

Устанавливаем связку Postfix + ExchangeКак организовать внутрикорпоративный документообо-рот на базе MS Exchange, оставив пользователям воз-можность общаться по электронной почте с внешним миром, и при этом не уменьшить уровень внутренней безопасности?

42

Автоматизируем подключениебаз 1С новой версии 8.0Рассматриваем новый механизм подключения баз 1C.

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

48

Проверяем HTTP-трафик на летуНастраиваем антивирус-прокси на основе ClamAV и HTTP AntiVirus Proxy.

4

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

Устанавливаем и настраиваемWindows Server Update ServicesСлужба WSUS облегчит отслеживание выхода новых версий программ, позволит своевременно устанавливать обновления, и, как следствие, повысит уровень безопас-ности информационной системы вашей компании.

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

54

Open-Xchange – свободу группам!Появилась альтернатива MS Exchange и Lotus Notes – те-перь нам доступна свободная версия Novell/SUSE Linux Open-Xchange сервера.

60

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

66

Удаленно управляем BIOS Setup Каждый из вас сталкивался с необходимостью войти в BIOS Setup и слегка его «подкрутить» или починить «рухнувшую» Windows NT, Linux/FreeBSD. Традиционно эта задача решается при помощи мыши и клавиатуры, но что делать, если сервер физически недоступен?

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

70

Автоматизация MS Windows, или AutoIt как мечта эникейщика.Часть 4Диск с автоматически установленной ОС Windows го-тов. Теперь и рядовой сотрудник компании сможет уста-новить новую и переустановить поврежденную станцию без локального участия системного администратора.

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

46

ТЕНДЕНЦИИ3

HARDWARE

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

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

76

WEB

История развития сайтостроенияОценим текущее состояние WWW и определим его бу-дущее развитие.

82

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

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

86

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

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

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

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

Владимир Агапов[email protected]

Евгений Воякин[email protected]

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

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

59, 94 BUGTRAQ

Павел Лебедев[email protected]

Алексей Моисеев[email protected]

2

события

зователей и миграции с Windows. Помимо этого будет про-ведена конференция по вопросам использования Linux в бизнесе, образовании и обеспечении информационной бе-зопасности. Организаторами конференции являются пор-тал Линуксцентр и компания Linux INK.

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

Более подробную информацию о LinuxLand можно по-лучить на официальном сайте выставки по адресу: http:\\www.linuxland.ru.

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

Ассоциация ISDEF («Форум независимых разработчи-ков программного обеспечения») объявляет о начале ре-гистрации участников четвертой международной конфе-ренции ISDEF’2005, которая пройдет в гостинице «Holiday Inn» (п. Виноградово, 4 км от МКАД по Дмитровскому шос-се) с 13 по 16 октября 2005 года.

Международная конференция ISDEF – это знаковое ме-роприятие не только для российского, но и мирового IT-рын-ка. Ежегодно ISDEF собирает все большее количество по-сетителей со всего мира. В прошлом году ISDEF’2004 со-брал около 500 участников, среди которых не только разра-ботчики и производители программного обеспечения, но и журналисты, крупнейшие дистрибьюторы и паблишеры ПО, представители инвестиционных и юридических компаний, государственных организаций и финансовых структур.

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

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

Для участия в конференции вам необходимо зареги-стрироваться на сайте: www.isdef.org.

Ежегодная выставка «СОФТУЛ», отметившая в прошлом году свое 15-летие, будет проводиться в период с 27 сен-тября по 1 октября 2005 года в Москве, в 69-м павильо-не ВВЦ. Выставка «СОФТУЛ» является самым крупным и представительным российским форумом новейших разра-боток в области информационных технологий и их приме-нения в экономике страны. В этом году в выставке примут участие более 300 компаний и ожидается свыше 60 000 посетителей.

Трудно переоценить значение этой выставки для раз-вития российской компьютерной индустрии. Председа-телем оргкомитета выставки является член президиума Российской академии наук, академик, директор ИРЭ РАН Ю.В. Гуляев, а в числе участников фигурируют такие из-вестные компании, как 1С, ABBYY Software House, Галак-тика, ГАРАНТ, Консультант Плюс, Лаборатория Касперско-го, ПРОМТ, РЕЛЭКС, Intel, Microsoft и другие.

В рамках выставки также проходит 6-я Всероссийская конференция «Информационные технологии в России». Конференция включает несколько разделов по ключевым направлениям развития IT: Управление, Информационная безопасность, ИТ в образовании.

Выставка в этом году включает в себя 5 расширенных экспозиций со своими секциями конференции: Документо-оборот (DOCFLOW), LinuxLand, АСУТП’Экспо, САПР’Экспо, ИТ в медицине и фармации.

Выставка LinuxLand на SofTool’2005В этом году впервые в истории выставки под ее эгидой бу-дет проводиться специализированная секция – LinuxLand, предназначенная для компаний, работающих в области Open Source.

Ее организатором выступит портал Линуксцентр (httt:\\www.linuxcenter.ru). На LinuxLand планируется собрать все Linux-компании в одном секторе выставочной площади, вы-деляющемся среди остальных стендов особой застройкой, приподнятым подиумным полом и освещением. В рамках LinuxLand будет организована Демо-Зона, где посетители выставки смогут непосредственно познакомиться с предла-гаемыми решениями для корпоративных, домашних поль-

27 сентября – 1 октябряSofTool пройдет уже в 16-й раз 13-16 октября

ISDEF’2005: инвестиции в будущее

Некоммерческая общественная организация «ITX commu-nity» совместно с Северо-Кавказской группой пользовате-лей Linux «NC LUG» приглашают вас принять участие во втором Международном форуме «Open Source Forum’05», намеченном на 15-17 сентября 2005 года в посёлке Архыз, пансионат компании «ЮгТехМонтаж».

Цель форума: съезд IT- специалистов для обмена мне-ниями, опытом в разработке решений на базе Open Source, практикой внедрения.

Все подробности предстоящего события, а также реги-страция слушателей и докладчиков на http://lug.kmv.ru/news.php?extend.465 и http://itx.ru/projects/osf/index.html.

15-17 сентябряOpen Source Forum’2005, п. Архыз

3№7, июль 2005

тенденции

Mozilla Suite будет житьНовый учрежденный проект SeaMonkey Project продолжит совершенствование набора открытых продуктов Mozilla Suite. Результаты работы SeaMonkey не станут официаль-ным обновлением к Mozilla Suite от Mozilla Foundation, одна-ко организация будет взаимодействовать с группой разра-ботчиков, предоставит им всю необходимую инфраструкту-ру, а улучшения, проводимые в SeaMonkey, будут возвра-щаться в кодовую базу Mozilla, откуда затем уже попадать в другие продукты Mozilla (Firefox и Thunderbird). Первые рели-зы SeaMonkey должны появиться в ближайшее время, и со-общается, что пользователи Mozilla 1.7.x и Mozilla 1.8 Alpha/Beta смогут найти в них множество улучшений.

Проблемы в безопасности DebianКак стало известно от Мартина Шульца, после выпуска Debi-an GNU/Linux 3.1 (Sarge) в инфраструктуре обеспечения бе-зопасности возникли некоторые проблемы, из-за которых команда Debian Security Team не могла выпускать обнов-ления к уязвимым пакетам. Майкл Стоун в свою очередь жаловался на нехватку людских ресурсов для своевремен-ного создания необходимых патчей. Однако уже в скором времени все проблемы были полностью решены, и с пер-вой половины июля инфраструктура обеспечения безопас-ности для двух последних стабильных релизов дистрибути-ва Debian GNU/Linux (3.1 «Sarge» и 3.0 «Woody») вновь пол-ностью функционирует, патчи ко всем пакетам предостав-ляются в обычном режиме.

Вена начинает переход на LinuxВ столице Австрии стартовала программа по миграции на программное обеспечение с открытым кодом на настоль-ных ПК. Городской советник Вены Руди Шикер представил на пресс-конференции специально разработанный Linux-про-ект, получивший название Wienux. Дистрибутив базируется на Debian GNU/Linux с Linux-ядром 2.6.11, графической сре-дой KDE и такими программами, как OpenOffice.org, Firefox и GIMP. Департаменты городской администрации получи-ли возможность перевода своих десктопов на Open Source. Из 16 тысячи городских настольных ПК с Windows 2000 на OpenOffice.org могут перейти 7,5 тысяч, а на Linux из них – 4,8 тысяч.

IBM предлагает переход с OS/2 на LinuxКорпорация IBM официально прощается со своей опера-ционной системой OS/2 – 23 декабря этого года продажи OS/2 будут прекращены, а поддержка ОС продлится до 31 декабря 2006 года. В то же время IBM опубликовала до-кумент для пользователей OS/2 по миграции на открытую операционную систему Linux: «Среди продукции IBM заме-ны нет. IBM предлагает пользователям OS/2 рассматривать Linux как альтернативную операционную систему для кли-ентских и серверных систем с OS/2». А петицию с прось-бой открыть исходные коды OS/2 к концу июля подписало свыше 12 тысяч человек.

Mozilla меняет план выпуска Firefox 1.1Некоммерческая организация Mozilla Foundation обновила план выпуска следующей версии браузера Firefox и решила

сменить номер будущего major-релиза – им станет 1.5, а не ожидавшийся ранее 1.1. Данные преобразования связаны с желанием разработчиков отразить значимость и число нов-шеств, которые появятся в Firefox 1.5. По ориентировочному плану выхода Firefox 1.5 «Deer Park», его бета-версия (1.4) выйдет в августе 2005 года, а сам стабильный релиз 1.5 – в сентябре этого же года. Среди изменений отмечается но-вый движок Gecko, совместимость с HIG, новая система об-новлений, улучшения в менеджере расширений.

Проект корпоративного дистрибутива Linux на базе DebianПоявились первые известия и подробности о проекте соз-дания корпоративного дистрибутива на базе Debian GNU/Linux. Среди компаний, подтвердивших свое участие в раз-работке новой системы отмечаются: credativ GmbH, Knop-pix, LinEx, Linspire, MEPIS, Progeny, Skolelinux, Sun Wah Linux, UserLinux, VA Linux Japan, Xandros. Союз получил название DCC (Debian Core Consortium), а в качестве руководителя и главного инициатора – Progeny Linux Systems Inc., исполни-тельным директором которой является основатель Debian Ян Мердок. Стандартными для дистрибутива станут пакеты формата DEB, но обещается и совместимость с RPM. Си-стема будет соответствовать стандарту LSB (Linux Standard Base) 2, положит основу для будущих релизов собственных дистрибутивов компаний-участников.

Составил Дмитрий Шурупов

по материалам www.nixp.ru

4

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

Представим, что у пользователей отсутствуют или от-ключены НГМД (про CD-ROM и USB я даже не упо-минаю – на мой взгляд, это непозволительная ро-

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

Для проверки наличия вирусов традиционно предла-гаю использовать наиболее распространенный из свобод-ных антивирусов – Clam AntiVirus (http://www.clamav.net). Я не буду подробно рассказывать о его преимуществах и осо-бенностях, о которых уже написано в статьях [1, 2, 3]. Се-годня мы разберем практические вопросы установки и ин-теграции антивируса с прокси-сервером. В качестве прок-си мы возьмем HTTP AntiVirus proxy (HAVP) [4].

Помимо HAVP также рассматривались и другие вари-анты. Но они либо на платной основе в случае коммерче-ского применения как dansguardian.org (plug-in к нему), ли-бо показались менее стабильными, по отзывам в форумах. Наверняка это не единственное, и, возможно, не самое лучшее решение, но тем не менее оно существует и впол-не справляется с поставленными задачами. С возможны-ми альтернативными вариантами вы можете ознакомить-ся по ссылке [5].

HTTP AntiVirus proxy – это прокси-сервер с фильтром – антивирусом. Сканируется весь трафик, и проверка на ви-русы является единственной задачей данного прокси-серве-ра. Поэтому вполне разумным было бы использовать HAVP в связке с кэширующим прокси, умеющим фильтровать тра-фик, например Squid. Ключевыми особенностями HAVP яв-ляются возможность непрерывной проверки трафика без тайм-аутов и блокировок, а также корректная работа с ди-намическими и защищенными паролем страницами.

Предполагается, что у вас уже имеется настроенный прокси-сервер, например Squid. На момент написания ста-тьи последней версией HAVP была 0.62. Установка произ-водилась на Red Hat Linux Enterprise 4, но без проблем все должно работать и на других UNIX-системах.

Устанавливаем HAVPДля начала создадим отдельную ФС для временных фай-лов HAVP. Отдельную – потому что ее необходимо монти-ровать с поддержкой так называемых «ручных блокиро-вок» для файлов (mandatory locks).

Это делается при помощи опции mand, команды mount. Я предпочел для ускорения работы и снижения нагруз-ки на дисковый массив создать такую файловую систе-му в ОЗУ:

Соответствующая строчка, которую необходимо до-бавить в /etc/fstab для автоматического создания файло-вой системы во время загрузки, выглядит следующим об-разом:

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

Кроме того, создадим директорию для лог-файлов прок-си-сервера и выставим владельца:

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

Сегодня антивирусная защита – непременный Сегодня антивирусная защита – непременный

атрибут грамотно спланированной IT-стратегии атрибут грамотно спланированной IT-стратегии

организации. Для не обремененного лишними организации. Для не обремененного лишними

деньгами бюджета IT-отдела закупка деньгами бюджета IT-отдела закупка

и установкаи установка на всех пользовательских на всех пользовательских

компьютерах антивирусных программ может компьютерах антивирусных программ может

стать вполне весомой статьей расходов. стать вполне весомой статьей расходов.

Можно ли как-тМожно ли как-то избежать лишо избежать лишних затратних затрат??

ПРОВЕРЯЕМ HTTP-ТРАФИК ПРОВЕРЯЕМ HTTP-ТРАФИК НА ЛЕТУНА ЛЕТУ

# mkdir /var/tmp/havp# chown nobody /var/tmp/havp# chgrp nobody /var/tmp/havp# mount -t tmpfs -o size=100M,mand tmpfs /var/tmp/havp

# <fs> <mt _ point> <type> <options> ↵ <dump> <pass>tmpfs /var/tmp/havp tmpfs auto,size=100M,mand ↵ 0 0

# df �h /var/tmp/havp

tmpfs 100M 0 100M 0% /var/tmp/havp

5№7, июль 2005

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

Теперь развернем предварительно скачанный со стра-нички [4] исходные коды прокси-сервера.

Далее, заходим в директорию havp-0.62 и начинаем пра-вить файл havp/default.h. Изменить требуется следующее:

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

Сервис запускается командой /usr/local/bin/havp. Сле-дующим шагом необходимо установить антивирус Clamav. Как это делать, описано ниже.

Устанавливаем ClamavПро установку антивируса Clamav читайте в [1, 2, 3]. Здесь же я приведу минимально необходимые для установки све-дения. Добавляем группу и пользователя, из-под которого будет запускаться демон:

Скачиваем с сайта проекта [6] последнюю версию ис-ходников, разархивируем и правим в clamav-config.h пере-менную SCANBUFF. Ее значение должно быть меньше, чем указанное в переменной MAXRECV файла havp/default.h. После чего выполняем привычные:

Добавляем в crontab строчку, запускающую команду по обновлению антивирусных баз:

Правим файл /usr/local/etc/clamav.conf. Добавляем:

и удаляем строчку:

Наконец, запускаем демон командой:

Теперь пробуем проверить наше свежеустановлен-ное решение. После того как в настройках браузера ука-жете порт, назначенный HAVP, и IP-адрес прокси, по ссыл-ке [7] можно попробовать скачать тестовую сигнатуру ви-руса. Что должно получиться при этой попытке, вы види-те на рис. 1, 2.

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

Литература, ссылки:1. Маркелов А. Броня моллюска. Обзор и установка анти-

вируса ClamAV. – Журнал «Компьютерра» №21, 2004 г. – 34-35 с. Статья доступна в Интернете по адресу: http://www.markelov.net/articles.php?lng=ru&pg=44.

2. Яремчук С. Свободный антивирус. – Журнал «Систем-ный администратор», №8, 2004 г. – 24-25 с.

3. Супрунов С. Еще раз о ClamAV: особенности установ-ки в FreeBSD. – Журнал «Системный администратор», №3, 2004 г. – 32-37 с.

4. HAVP – http://www.server-side.de.5. Методы проверки HTTP-трафика при помощи Clamav –

http://www.clamav.net/3rdparty.html#webftp.6. http://www.clamav.net.7. Тестовая сигнатура вируса – http://www.eicar.org/anti_vi-

rus_test_file.htm.

Рисунок 2. Сработала защита

# mkdir /var/log/havp# chown nobody /var/log/havp# chgrp nobody /var/log/havp

# tar zxvf havp-0.62.tar.gz

#deÞne GROUP "nobody"// В дополнение к пользователю, из-под которого будет// запускаться служба, меняем на nobody и группу#deÞne PARENTPROXY "localhost"#deÞne PARENTPORT 3128// Указываем хост и порт, на котором установлен кэширующий// прокси-сервер, например Squid. Если «родительского»// прокси у вас нет, то комментируем #deÞne SCANTEMPFILE "/var/tmp/havp-XXXXXX"#deÞne ACCESSLOG "/var/log/havp/access.txt"#deÞne ERRORLOG "/var/log/havp/error.txt"// Указываем шаблон временных файлов и имена файлов// журналов. При этом все три указанные директории и два// файла журналов должны быть созданы вручную и иметь// соответствующие разрешения для пользователя,// из-под которого запускается HAVP. Естественно, вы можете// изменить пути и названия файлов по своему усмотрению

# ./conÞgure# make# make install

# groupadd clamav# useradd -g clamav -s /bin/false clamav

# ./conÞgure# make# make install

1 * * * * /usr/local/bin/freshclam -quiet

LocalSocket /var/run/clamd.sock

Example

# /usr/local/sbin/clamd

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

StreamSaveToDisk

6

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

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

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

DDansansGGuardianuardian + C + ClamlamAV:AV:ФИЛЬТРУЕМ ВЕБ-СОДЕРЖИМОЕФИЛЬТРУЕМ ВЕБ-СОДЕРЖИМОЕИ СТРОИМ АНТИВИРУСНУЮ ЗАЩИТУИ СТРОИМ АНТИВИРУСНУЮ ЗАЩИТУ

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

Для ее обеспечения, по данным исследования IDC, российские пользователи затратили почти

42$ млн. на специализированное программное обеспечение. Но существуют и бесплатные

продукты, не уступающие коммерческим по функциональности.

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

7№7, июль 2005

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

DansGuardian – фильтр веб-содержимого для ОС Linux, FreeBSD, OpenBSD, NetBSD, Mac OS X, HP-UX и Solaris, ис-пользует прокси-серверы squid или oops. Он фильтрует со-держимое несколькими методами: по фразам, картинкам и URL. В отличие от некоторых других фильтров, он не ис-пользует «черный лист» URL, который надо постоянно об-новлять (да и к тому же Интернет большой, все не пере-числишь).

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

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

Я устанавливал dansguardian на ОС Linux Alt Mas-ter 2.4:! Версия dansguardian – 2.8.0.3 (версия антивирусного

патча 6.3.8).! Версия squid – 2.5.STABLE9.! Версия clamav – 0.86.1.! Версия libesmtp – 1.0.3r1.

Dansguardian не является редиректором (как, напри-мер, squidGuard), хотя многие первоначально думают имен-но так. Это прокси-сервер, и он использует squid как веб-браузер. Для того чтобы пользователи не использовали squid напрямую, необходимо в конфигурационном фай-ле firewall указать перенаправление с порта squid на порт dansguardian. Либо установить dansguardian на порт 3128, а squid перенести на какой-либо другой, открыв доступ только с 127.0.0.1

Для начала установим СlamAV. Скачать его можно с официального сайта http://www.clamav.net.

Конфигурирование clamav не займет много времени. Просто немного подредактируйте clamd.conf.

Dansguardian требует библиотеку libesmtp для отправки сообщений системному администратору. Скачать ее мож-но с http://www.stafford.uklinux.net/libesmtp.

Устанавливается просто:

Пропатчивать dansguardian для поддержки firewall не нужно, скачать его с поддержкой антивируса можно с http://www.harvest.com.br/asp/afn/dg.nsf.

Далее следует настроить dansguardian. Конфигураци-онный файл /etc/dansguardian/dansguardian.conf оснащен отличными комментариями, так что, я думаю, не будет за-труднений в конфигурировании:

./conÞguremakemake install

./conÞgure �-preÞx=/usrmakemake install

./conÞgure --sysconfdir=/etc/dansguardian/ --cgidir=/var/www/cgi-bin/ --runas _ usr=squid

reportinglevel = 3languagedir = '/etc/dansguardian/languages'# К сожалению, русского языка в списке нет. Я сделал# перевод и в ближайшее время отправлю автору. Вы можете# скачать архив с сайта журнала http://www.samag.ru,# раздел «Исходный код». Чтобы установить язык, необходимо# разархивировать файл в папку /etc/dansguardian/languages# и в конфигурационном файле указать: language = 'russian'

# Что записывать в лог# 0 = none 1 = just denied 2 = all text based# 3 = all requestsloglevel = 2# Протоколировать, если страница была передана пользователюlogexceptionhits = on

# формат ведения лога# 1 = DansGuardian format 2 = CSV-style format# 3 = Squid Log File Format 4 = Tab delimitedlogÞleformat = 1

# Местонахождение лог-файлаloglocation = '/var/log/dansguardian/access.log'

# Сетевые опции# IP-адрес, на котором слушает dansguardianÞlterip =Þlterport = 8080

# IP-адрес и порт прокси-сервера (squid или oops)proxyip = 127.0.0.1proxyport = 3128

# URL, на который произойдет переадресация при блокировкеaccessdeniedaddress = ↵ 'http://YOURSERVER.YOURDOMAIN/cgi-bin/dansguardian.pl'nonstandarddelimiter = on

# Заменять запрещенную картинку какой-нибудь своейusecustombannedimage = 1custombannedimageÞle = '/etc/dansguardian/transparent1x1.gif'

# Создать фильтр для группы пользователей.# Dansguardian будет автоматически смотреть в файл# dansguardianfN.conf, где N � номер группыÞltergroups = 1# Чтобы поставить пользователей в соответствие с группами,# отредактируйте файл ÞltergrouplistÞltergroupslist = '/etc/dansguardian/Þltergroupslistv# Местоположение файлов аутентификацииbannediplist = '/etc/dansguardian/bannediplist'exceptioniplist = '/etc/dansguardian/exceptioniplist'banneduserlist = '/etc/dansguardian/banneduserlist'exceptionuserlist = '/etc/dansguardian/exceptionuserlist'

# Записывать в лог найденные причины блокировки.showweightedfound = on

# 0 = off � не использовать# 1 = on, normal � использовать в стандартном режиме# 2 = on, singular � записывать каждый аргумент,# но только один раз для страницыweightedphrasemode = 2urlcachenumber = 2000urlcacheage = 900

# Фильтрация содержимого по фразам# 0 � фильтрация html вместе с мета-тэгами# 1 - удаление многочисленных пробелов и html-тэгов# перед фильтрацией# 2 � оба методаphraseÞltermode = 2preservecase = 0

--runas _ grp=squid

make make instal

8

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

Конфигурационный файл squid менять не будем. Будем считать, что squid настроен и нормально функционирует, за исключением того случая, если вы хотите установить Dan-sguardian на порт 3128. Тогда необходимо изменить порт в конфигурационном файле squid.

Теперь необходимо настроить firewall на перенаправле-ние. В Linux это делается примерно так:

x.x.x.x поменяйте на IP интерфейса, который смотрит в сто-рону локальной сети.

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

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

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

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

Ссылки:1. Введение в dansguardian и руководство по детальной

инсталляции dansguardian: www.dansguardian.org.2. Информация о продукте SmoothGuardian: www.smooth-

wall.net.

# файлов, в которых можно вписывать исключения,# т.е. информация с данных сайтов, url, ip или по запросам# данных пользователей не будет фильтроваться.virusscanexceptions = onurlcachecleanonly = onvirusscannertimeout = 60# Использование почтового оповещенияnotify = 0

# Настройки CLAMDSCAN # --------------------# Сокет демона clamd (указывается в clamd.conf)localsocket = '/tmp/clamd'

# Настройки CLAMAV# --------------------clmaxÞles = 1500clmaxreclevel = 3clmaxÞlesize = 10485760

iptables -t nat -A PREROUTING --dst x.x.x.x -p tcp ↵ --dport 3128 -j DNAT --to-destination x.x.x.x:8080

# Перекодировка в hex для фильтрования документов# с различными кодировкамиhexdecodecontent = 0# Использовать алгоритм «Quick Search», в отличие от# алгоритма DFA. Алгоритм DFA позволяет работать быстрее,# но его текущая версия не совсем совместима с 16-битными# символами. Если вы хотите использовать 16-битные символы,# включите эту опцию.forcequicksearch = 0

reverseaddresslookups = offreverseclientiplookups = off

# Создавать файлы bannedsitelist и bannedurllist# со списком запрещенных сайтов и URLcreatelistcacheÞles = on

# Максимальный размер передаваемого от клиента файла# в байтах# 0 � блокировать# -1 � не блокировать# или размер файлаmaxuploadsize = -1maxcontentÞltersize = 256# Методы аутентификации пользователя на прокси-сервереusernameidmethodproxyauth = on# **На данный момент не работает**usernameidmethodntlm = off usernameidmethodident = offpreemptivebanning = on# Добавлять заголовки X-Forwarded-For: <IP-адрес клиента>forwardedfor = offusexforwardedfor = offlogconnectionhandlingerrors = on

# Опции дочерних процессов# Максимальное количество процессовmaxchildren = 120# Первоначальное количество процессовminchildren = 8# Количество процессов, которые должны быть готовы# к соединениюminsparechildren = 4preforkchildren = 6# Максимальное количество бездействующих процессовmaxsparechildren = 32# Максимальное количество сайтов, обработанных процессомmaxagechildren = 500

# Опции коммуникации между процессамиipcÞlename = '/tmp/.dguardianipc'urlipcÞlename = '/tmp/.dguardianurlipc'

# PID ÞlenamepidÞlename = '/var/run/dansguardian.pid'nodaemon = offnologger = off# Пользователь и группа, с чьими правами запускается# dansguardiandaemonuser = 'squid'daemongroup = 'squid'softrestart = off

# Антивирусные настройки# --------------------# Включить проверку на вирусыvirusscan = on# Способ проверки clamdscan, clamav или kavvirusengine = 'clamav'# Максимальное количество информации, переданной клиенту,# если файл содержит вирусtricklelength = 32768Þrsttrickledelay = 30followingtrickledelay = 60# Список типов MIME, не проверяемых на вирусыexceptionvirusmimetypelist = ↵ '/etc/dansguardian/exceptionvirusmimetypelist'# Максимальный размер содержимого для проверки,# если 0 � не ограниченоmaxcontentscansize = 0# Файлы с определенными расширениями не будут проверяться exceptionvirusextensionlist = ↵ '/etc/dansguardian/exceptionvirusextensionlist'# Временная директория, в которую сохраняется файл# для проверкиdownloaddir = '/tmp/dgvirus'# В директории /etc/dansguardian содержатся несколько

9№7, июль 2005

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

Отношения пользователей по от-ношению к антивирусам варьи-руется от полной уверенности

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

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

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

С другой стороны, наблюдение за работой системы либо за основными файлами позволяет определить не-приятности и предотвратить нападе-ние, такие системы принято относить к классу систем предотвращения про-никновения (Intrusion prevention sys-tems) и проактивным системам защи-ты. В мире Linux давно известны та-кие проекты, как LIDS, RSBAC, grsecu-rity, tripwire и другие которые при пра-вильной настройке надежно защища-

ют систему. В последнее время ста-ло заметно оживление и среди раз-работчиков систем безопасности для ОС Windows.

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

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

ППРОАКТИВНЫЕ СИСТЕМЫ ЗАЩИТЫ,РОАКТИВНЫЕ СИСТЕМЫ ЗАЩИТЫ,ИЛИ ЕСТЬ ЛИ ЖИЗНЬ БЕЗ АНТИВИРУСА?ИЛИ ЕСТЬ ЛИ ЖИЗНЬ БЕЗ АНТИВИРУСА?

Антивирусное программное обеспечение так тесно вошло в жизнь каждого пользователя

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

программы проактивной защиты компьютеров, которые в отличие от реактивных систем,

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

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

10

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

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

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

Часовой по имени ScottyНачну с программы, которой поль-зуюсь уже более двух лет. WinPatrol (http://www.winpatrol.com) текущая вер-сия 9.1, статус freeware, поддерживают-ся Windows 95, 98, ME, 2000, NT и XP, размер – 0.98 Кб.

WinPatrol делает снимок критиче-ских системных ресурсов и предупреж-дает в случае любых изменений. По-сле запуска в трее возле часов появит-ся значок с изображением собаки, на-званной Scotty the Windows Watch Dog. Вот теперь этот самый Scotty WWD без-устанно и будет следить за всем, что происходит на доверенном ему ком-пьютере, «разнюхает» все о саморазм-ножающиеся вирусах, Adware, Spy-ware, троянах, пробравшихся на ваш компьютер и, конечно, Cookies, кото-рые будут поступать к вам постоянно. Scotty позволяет подтверждать уста-новку любых новых программ на ком-пьютере. Вызвав программу, получим окно программы с несколькими вклад-ками (рис. 1):! Startup Programs – позволяет про-

смотреть все запущенные прило-

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

! IE Helpers – контроль за Browser Helper Objects, т.е. информация об имеющихся объектах, запрос на установку новых объектов, удале-ние подозрительных объектов. На-до сказать, что Browser Helper Ob-jects запускаются каждый раз вме-сте с Internet Explorer (который ста-раниями Microsoft является неотде-лимой частью систему), в том числе и при открытии папок на локальном компьютере. Поэтому при их помо-щи можно без проблем следить за пользователем, что и применяется в программах типа SpyWare.

! Scheduled Task Monitoring – ото-бражение запланированных задач, контроль над добавлением новых и получение дополнительной инфор-мации о планируемых работах

! Services – отключить или времен-но остановить запущенные серви-сы и получение дополнительной ин-формации о них. Чтобы не выиски-вать подозрительные программы в большом списке, можно включить пункт «List non-Microsoft services

only», убрав таким образом систем-ные.

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

! Cookies – информирование о появ-лении новых Cookies, отклонение, управление и просмотр информа-ции записанной в Cookies для при-нятия решения. Можно также со-ставить правило фильтрования для Cookies, которые всегда долж-ны удаляться (Cookies with Nuts).

! Options – установка опций самой программы. Здесь же устанавли-вается контроль за подменой до-машней страницы в веб-браузере, реакция на изменение файла hosts или его полная блокировка, выве-дение полного отчета по системе, ведение истории изменений.

! File Types – позволяет просматри-вать, контролировать и восстанав-ливать измененную ассоциацию приложений с расширениями фай-лов.

! PLUS – зарегистрировавшись, вы получаете доступ к сетевой базе данных программ, цель которой по-мочь пользователям разобраться в списке незнакомых названий, ведь надпись servise.exe в таблице про-цессов большинству ничего не ска-

Рисунок 1. Основное окно WinPatrol

11№7, июль 2005

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

жет. На момент написания статьи регистрация была бесплатной.

Менеджер процессов AnVir Task ManagerПервое, что приходит в голову после знакомства с менеджером процессов AnVir Task Manager (http://anvir.com/an-virrus.exe), что это не серьезно. Виной является небольшой размер програм-мы, чуть меньше 380 Кб. А зря. Несмо-тря на такой маленький размер, про-грамма помогает:! получить полную информацию о за-

пущенных процессах (путь к файлу, описание, время работы, родитель-ский процесс, командная строка, использование процессора, памяти, список используемых dll, файлов, драйверов, потоков, окон и пр.);

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

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

При помощи AnVir Task Manager возможно остановить любой процесс, изменить приоритет, добавить в авто-загрузку (рис. 3). Антивирусная ба-за содержит только наиболее распро-страненные вирусы, все запускаемые программы и записи реестра автома-тически проверяются на наличие виру-сов. Кроме всего прочего, в трее ото-бражаются иконки загрузки процес-сора и диска, а из консоли управле-ния можно быстро получить доступ к основным системным утилитам.

Перехват системных вызовов с Safe’n’SecРоссийская компания StarForce (http://www.star-force.ru) уже давно известна своим одноименным механизмом за-щиты дисков от нелегального копиро-

вания. Новая разработка Safe’n’Sec, представленная в ноябре прошло-го года, практически сразу получила признание и была названа журналом PC Magazine/RE антивирусом месяца. При этом Safe’n’Sec не относится к ан-тивирусам, а принадлежит к классу систем проактивной защиты, которые анализируют подозрительное поведе-ние пользователя или программы. Для малых и средних предприятий, а также индивидуального использования пред-назначена версия Personal. В корпора-тивной версии Safe’n’Sec Business име-ется административная консоль, ко-торая позволяет системному админи-стратору дистанционно инсталлиро-вать и настраивать программу на ком-пьютерах пользователей.

Версия 1.1, актуальная на момент написания статьи, доступна в двух ва-риантах – усеченная Safe’n’Sec ver. 1.1 и полная Safe’n’Sec ver. 1.1 + antivirus. Последняя, как понятно из названия, включает возможность антивирусной проверки. Основу продукта составля-ет модуль Intelligent activity control, поз-воляющий обнаруживать комбиниро-ванные атаки, предотвратить попыт-ки внести изменения в системный ре-естр или состояние сервисов операци-онной системы, открыть доступ к ре-гистрационным данным пользователя и пр. При этом механизм принятия ре-шения Safe’n’Sec действует на основе правил, учитывающих все возможные последовательности действий, класси-фицируемых как вредоносные. Защита

всех данных на компьютере пользова-теля осуществляется в соответствии с политикой контроля активности, опре-деляющую, какие действия и их после-довательность нужно считать вредо-носными. На данный момент имеются три политики – жесткая, строгая и до-верительная. После обнаружения по-дозрительного приложения Safe’n’Sec самостоятельно принимает решение об его вредоносности и уведомляет пользователя, который должен опре-делить, что делать с таким приложе-нием (разрешить или заблокировать) (рис. 4). Причем для упрощения приня-тия решения доступна история актив-ности, по которой он может подробно изучить последовательность действий, выполненных приложением. Дополни-тельно из консоли можно получить до-ступ к списку запрещенных и доверен-ных приложений, который можно здесь же отредактировать. Для тестирования работоспособности вместе с програм-мой поставляется утилита snstest.exe, которая имитирует занесение данных в системный реестр, попытку записи и удаления из системного каталога.

Всесторонний контрольс RegRunRegRun Security Suite (http://www.grea-tis.com) работает со всеми версиями Windows. Еще один комплект средств для защиты компьютера против виру-сов или троянцев, spyware и adware. Он доступен в трех основных вариантах: Standart (для обычных пользователей, Рисунок 2. Предупреждающее сообщение

AnVir Task Manager

Рисунок 3. AnVir Task Manager позволяет получить полную информацию о процессах

12

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

обеспечивает легкое управ-ление и безопасность), Pro-fessional (имеет дополнитель-ные возможности по работе с системным реестром, позво-лят быстро оптимизировать системные параметры и обес-печить надежную защиту), и самые большие возможнос-ти имеет Gold, предназначен-ная для профессионалов. По ссылке http://www.greatis.com/security/rus.exe доступен руси-фикатор программы, к тому же на сайте http://www.ruhelp.narod.ru имеется неофициаль-ный перевод файла помощи, облегчающий знакомство с программой.

После запуска RegRun ак-тивизируется защита, опреде-ляемая уровнем безопаснос-ти – от низкого до ультравы-сокого. В Центре Управления RegRun настраиваются параметры работы ос-новных модулей (рис. 5). Например, «WATCH DOG» обеспечивает контроль за автозагрузкой в течение работы, он может быть настроен на проверку конфигурации автозагрузки при стар-те и выключении Windows либо через заданные промежутки времени. Если при проверке обнаруживаются изме-нения, пользователь будет извещен об этом, и дополнительно запустится утилита Start Control, при помощи ко-торой можно получить детальную ин-формацию об автоматически запуска-емых программах.

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

новления они копируются в хранили-ще, которое находится в «Мои доку-менты\RegRun2». Правда, само хра-нилище почему-то программа никак не защищает и на подмену файлов никак не реагирует.

При обнаружении модификации защищаемых файлов будет выведено предупреждение, с указанием размера и даты создания обоих файлов. Теперь этот файл можно копировать, переиме-новать, удалить, открыть или проска-нировать антивирусной программой. Для поиска вирусов, не известных ан-тивирусным программам, RegRun от-крывает и контролирует множество программ-«приманок», если обнаружи-вается изменение любого из этих фай-лов, RegRun сообщит о присутствии вируса. Для Windows такой приманкой является файл winbait.exe, автозапуск которой заносится в реестр и сравни-вается с winbait.org, кроме того, пре-дусмотрена возможность добавления своего подконтрольного файла. Reg-Run имеет базу данных приложений, которая содержит описание наибо-лее часто встречающихся программ, помогающую пользователю опреде-лить принадлежность к одной из четы-рех групп: необходимые, бесполезные, опасные и по вашему выбору. RegRun проверяет присутствие любых потен-циально опасных программ и инфор-мирует пользователя о них, кроме то-го, он совместим со всеми известными антивирусами, и Антивирус Координа-

тор может быстро проверить файлы, помещенные в авто-загрузку. Дополнительно де-тектор подстановки сравни-вает реальный путь к испол-няемому файлу с загружен-ным. Например, если процесс с именем explorer.exe запуска-ется не из папки c:\windows\system, а из другого места, то пользователь будет опо-вещен. Трассировщик сис-темного реестра Registry Trac-er, который имеется в верси-ях Professional или Gold, поз-воляет указать список клю-чей реестра, при попытке из-менения которых RegRun вы-даст предупреждающее со-общение.

Менеджер процессов поз-воляет не только просмотреть и при необходимости убить по-

дозрительный процесс, а также выдает информацию по загруженным DLL и се-тевой активности приложений. Утили-та RunGuard, доступная в версии Gold, проверяет файлы перед выполнением. Контролируются файлы Microsoft Of-fice (doc, dot, xls, xlt, ppt), html, Windows script (vbs, wsh, js, bat pif, cmd), hta и reg. При появлении подозрительных запро-сов они блокируются, и пользователь может проанализировать содержание файла, проверить его антивирусом, за-блокировать или разрешить дальней-шее выполнение (см. рис. 6).

Контроль целостностис XintegrityНемного другим путем пошли разра-ботчики Xintegrity (http://www.xinteg-rity.com). Основная задача которой – контроль целостности и обнаружение любого даже самого незначительно-го изменения файлов. Кроме контро-ля содержания файлов, утилита обна-руживает изменения в структуре ка-талога, включая альтернативные по-токи данных (Alternate Data Streams), изменения параметров доступа к файлам, регистрационных данных и сервисах. Для этого первоначаль-но создается база данных, содержа-щая информацию о контролируемых приложениях. Интересно, что разра-ботчики учли возможность скрыто-го применения утилиты, и можно за-дать любое название, расширение

Рисунок 4. Предупреждающее сообщение Safe�n�Sec

Рисунок 5. Центр Управления RegRun

13№7, июль 2005

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

и месторасположение баз. Поэтому, назвав файл как-то буднично, напри-мер, kursovik.rtf или song.mp3 и поло-жив в группу подобных файлов, мож-но ее скрыть. При создании базы воз-можны три варианта: в нее заносятся только контрольные суммы файлов, делается резервная копия всех дан-ных, и резервные копии дополнитель-но шифруются (256 бит AES). В пос-ледних двух случаях, кроме контро-ля, позволяют восстанавливать изме-ненные файлы. В качестве контроль-ной суммы можно использовать не-сколько вариантов – от 128-разряд-ной хеш-функции MD5 до AES с 256-разрядной длиной ключа. При помо-щи Xintegrity можно проверять целос-тность файлов по требованию или за-пустить ее в фоновом режиме, тогда при обнаружении изменения поль-зователь будет сразу же уведомлен. Когда Xintegrity обнаружит такой из-мененный файл, пользователю бу-дет выдана подробная информация о том, как и когда файл был изме-нен, и при определенных опциях со-здания базы будет предложено заме-нить его резервной копией. Напри-мер, на рис. 7 выведено различие контролируемого файла и этого же файла, зараженного вирусом Win32.HLLP.Underscore.36864.

В целях безопасности при откры-тии базы Xintegrity автоматически про-веряет как себя, так и все зарегистри-рованные базы на предмет целостно-сти. При создании базы данных в нее можно занести все файлы, лежащие в определенном каталоге, либо при по-мощи набора фильтров отобрать фай-лы, удовлетворяющие определенным критериям (размер, время модифика-ции или создания, по типу, содержимо-му, атрибутам и функциональным воз-можностям). Имеется пункт, включаю-щий в себя все вышеперечисленное, а также поддерживается Drag’and’Drop и вставка файла с буфера обмена. Фай-лы, расположенные на дисках с фай-ловой системой FAT32, NTFS, и сете-вые папки могут быть перечислены в одной базе данных. Как видите, мож-но задать практически любые усло-вия. Поэтому можно создать несколь-ко баз, в одну собрать исполняемые и системные файлы, в другую – сетевые ресурсы, к которым имеете доступ, в третью – ресурсы, способные работать

в сети. И для каждой задать свой ре-жим проверки.

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

ные приложения. Между тем произво-дители уже встраивают подобные инс-трументы в свои утилиты. Например, Ti-ny Firewall (http://www.tinysoftware.com) содержит Host Security Engine (HSE), по принципу работы несколько напо-минающий проактивные антивирусы, а при помощи Track’n Reverse позво-ляет в случае обнаружения зловред-ной утилиты вернуть систему в исход-ное состояние. Или продукт компании Aladdin (http://www.eAladdin.com) eSafe (http://www.esafe.com) использует, кро-ме традиционных средств, и проактив-ный антивирус (Proactive Security En-gine). По мнению многих аналитиков, ближайшее время пройдет под знаком проактивной защиты.

Рисунок 6. Предупреждающее сообщение RegRun Run Guard

Рисунок 7. Xintegrity позволяет сравнить измененный файл с оригиналом

14

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

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

Работа в «нормальном» режимеSpamd может быть сконфигурирован для работы в одном из двух режимов – «нормальном» и «сером» (greylisting mode). Схема работы spamd в нормальном режиме пред-ставлена на рис. 1.

Соединение на порт 25 (SMTP) в зависимости от принад-лежности отправителя черному списку пакетный фильтр pf либо пропускает как есть (на 25-й порт, прослушиваемый MTA) либо перенаправляет на вход spamd (по умолчанию используется порт TCP 8025, см. /etc/services). Типичный SMTP-диалог со spamd (для перенаправленных соедине-ний) выглядит следующим образом:

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

Работа в «сером» режимеБудучи запущенным в greylisting mode (см. рис. 2), spamd для отправителей, занесенных в описанные в конфигура-ционном файле списки, работает так же, как и в нормаль-ном режиме. Однако для соединений от неизвестных адре-сатов алгоритм работы меняется – они отклоняются с кодом 451, но задержка вывода символов диалога при этом не вы-полняется. Одновременно идентификационная информация соединения (IP-адрес источника, почтовые адреса отправи-теля и получателя) заносятся в базу данных /var/db/spamd с пометкой GREY. Так же фиксируется и время первой попыт-ки. И в дальнейшем, если сообщение будет получено спус-тя время, равное значению параметра passtime (значение по умолчанию – 25 минут), то адрес отправителя заносится в бе-лый список. Если же повторная попытка не будет выполне-на в течение времени, указанному параметром greyexp (по умолчанию 4 часа), запись для данного соединения удаля-ется из /var/db/spamd.

ЗАПУСКАЕМ SPAMD НА FreeBSDБороться и искать,

Найти и не сдаваться!

Программа spamd, являющаяся частью OpenBSD,

призвана блокировать нежелательную почту.

Благодаря своей эффективности и оригинальному

подходу к решению проблемы она была портирована

на ряд других систем, включая FreeBSD.

Об особенностях работы на этой платформе

и пойдет речь в сегодняшней статье.

СЕРГЕЙ СУПРУНОВ

220 test.ru ESMTP spamd IP-based SPAM blocker; Thu Jul 7 07:56:09 2005HELO me250 Hello, spam sender. Pleased to be wasting your time.MAIL FROM: [email protected] You are about to try to deliver spam. Your time will be spent, for nothing.RCPT TO: [email protected] This is hurting you more than it is hurting me.data354 Enter spam, end with "." on a line by itselfHello, spamd!I test you!!!.450 SPAM. Blocked by me.

Рисунок 1. Схема работы spamd в нормальном режиме

15№7, июль 2005

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

Для адресов, занесенных в белый список, выполняется отслеживание соединений на 25-й порт (эту работу выпол-няет spamlogd), и если активности не наблюдалось в тече-ние времени, равного значению параметра whiteexp (864 ча-са по умолчанию), то адрес удаляется из белого списка.

ПеренаправлениеЗа перенаправление почтового трафика, согласно спискам spamd, на порт 8025 отвечает пакетный фильтр pf (также портированный во FreeBSD из OpenBSD). Для этого в /etc/pf.conf нужно создать следующие записи:

Обратите внимание на такую особенность. В man 8 spamd в качестве примера показано перенаправление на адрес 127.0.0.1. Однако если на вашей системе запущен еще и ipfw (что вполне вероятно), то для него по умолча-нию имеются такие правила (см. /etc/rc.firewall):

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

Таблица <spamd> формируется утилитой spamd-setup, которая получает информацию из файла конфигурации /usr/local/etc/spamd.conf. Адреса, входящие в списки, помечен-ные в конфигурационном файле как black, будут занесены в указанную таблицу при запуске фильтра spamd. Подроб-нее использование списков будет рассмотрено позже при обсуждении конфигурации.

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

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

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

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

Установить и не запутатьсяИнсталляция из системы портов никаких сложностей не вы-зывает. Все традиционно:

Теперь осталось в файле /etc/rc.conf включить под-держку spamd и пакетного фильтра pf (если он не был за-пущен ранее):

Нужно обратить внимание вот на что: файл с именем spamd уже может находиться в вашей системе. Это гордое имя носит также и демон Spamassassin, и если вы устанав-ливали этот пакет, то соответствующий файл будет лежать в /usr/local/bin/ (при условии, что не менялись стандартные пути). Однако беспокоиться по этому поводу не стоит – наш spamd устанавливается в другое место, и перезаписи фай-лов произойти не должно.

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

Небольшая проблема возникает при «ручном» управ-лении фильтром с использованием сценария из /usr/local/etc/rc.d: поскольку spamd не использует PID-файл, то при запуске соответствующего скрипта с ключом «start» вы-полняется проверка по имени запущенных процессов. Так как при этом обнаруживаются процессы, принадлежащие spamassassin, то запуск не выполняется:

Рисунок 2. Схема работы spamd в greylisting mode

table <spamd> persistrdr pass inet proto tcp from <spamd> ↵ to any port smtp -> 1.2.3.25 port 8025

${fwcmd} add 200 deny all from any to 127.0.0.0/8${fwcmd} add 300 deny ip from 127.0.0.0/8 to any

# cd /usr/ports/mail/spamd; make install

pf _ enable="YES"pf _ ßags=""pßog _ enable="YES"

pfspamd _ enable="YES"pfspamd _ ßags="-v"

Таблица 1. Расположение компонентов Spamassasin и Spamd

16

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

Обойти это можно, запуская pfspamd.sh с ключом «fast-start» вместо «start». При этом проверка того, запущен ли соответствующий процесс, выполняться не будет, эта за-бота ложится на плечи администратора.

При автоматическом запуске во время загрузки системы первым стартует pfspamd.sh (rc-сценарии исполняются в по-рядке, определяемом утилитой rcorder, но в данном случае требования к порядку запуска у рассматриваемых скрип-тов одинаковы, и они будут выполняться в алфавитном по-рядке, так что pfspamd.sh имеет преимущество). Поскольку запускаемый вторым скрипт sa-spamd.sh ориентируется по своему PID-файлу, то и его старт проходит нормально.

Настроить и запуститьНастройки белых и черных списков для spamd сосредоточе-ны в файле /usr/local/etc/spamd.conf. Сразу после установки в указанном каталоге будет находиться только файл spamd.conf.sample, который следует переименовать в spamd.conf и подправить под собственные нужды. Кроме того, потребует-ся внести ряд изменений в файл /etc/pf.conf (конфигурацион-ный файл пакетного фильтра pf). Также нужно знать ключи запуска spamd, поскольку именно ими определяется режим работы демона и значения используемых параметров.

Параметры spamd.confДанный конфигурационный файл используется утилитой spamd-setup для первоначальной настройки таблиц pf при запуске spamd. Формат spamd.conf достаточно прост и со-ответствует getcap(3). В нем обязательно должна присут-ствовать запись all:

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

Данный список для блокировки нежелательной почты использует информацию о спаммерах, собираемую сайтом spamhaus.org (для загрузки по http используется файл, со-храненный на сервере openbsd.org).

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

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

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

Сформированные списки утилита spamd-setup загружа-ет в таблицу <spamd> фильтра pf (используя команду pfctl), а также отправляет их на управляющий порт (tcp/8026) де-мону spamd.

В ходе тестирования было выявлено интересное поведе-ние демона (используемая версия программы – 3.7) – то ли из-за ошибки разработчика, то ли по иной недосягаемой для моего понимания причине spamd при обработке данных, по-ступающих на порт 8026, не воспринимает последний (самый большой) адрес. Поскольку в таблицу <spamd> он заносится нормально, то перенаправление на порт 8025 его соедине-ний выполняется, но spamd как «черный» данный адрес не воспринимает, помечая его как серый (GREY) и возвращая вместо ответа 450 или 550, определяемого ключами запу-ска, код 451 «Временная ошибка». Но так как на MTA такое соединение все равно не проходит, на корректность работы фильтра эта ошибка практически не влияет.

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

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

Наблюдать за процессом заполнения черных списков можно, запустив spamd-setup с ключом -d:

# ./pfspamd.sh start

pfspamd already running? (pid=26357 26359 26361 26363 26366).

all:\ :spamhaus:blacklist:whitelist:

spamhaus:\ :black:\ :msg="SPAM. Your address %A is in the Spamhaus ↵ Block List\n\ See http://www.spamhaus.org/sbl and\ http://www.abuse.net/sbl.phtml?IP=%A for more details":\ :method=http:\ :Þle=www.openbsd.org/spamd/SBL.cidr.gz:

blacklist:\ :black:\ :msg="SPAM. Blocked by me":\ :Þle=/usr/local/etc/spamd/blacklist.txt:

whitelist:\ :white:\ :Þle=/usr/local/etc/spamd/whitelist.txt:

# Пример черного списка192.168.0.5 # Отдельный IP-адрес10.0.0.1 � 10.0.2.255 # Диапазон адресов наглых спаммеров!!! 5.6.7.0/24 # Так можно задать подсеть# Попытка обмануть spamd:255.255.255.254

17№7, июль 2005

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

Не забывайте выполнять spamd-setup каждый раз после перезапуска pf, чтобы вновь заполнить таблицу <spamd>. Так же полезно занести вызов этой утилиты в crontab, что-бы периодически (например, раз в сутки) обновлять внеш-ние черные списки.

Настройка журналированияДемон spamd пишет свои сообщения в syslog. Чтобы со-брать все сообщения в одно место, удобно направить их в отдельный файл, для чего в /etc/syslog.conf поместим строки:

Правда, при такой настройке Spamassassin (если он запущен) тоже будет использовать этот файл. Поскольку syslogd не создает отсутствующие файлы, то это придется сделать вручную, после чего нужно отправить сигнал HUP процессу syslogd:

Теперь сообщения от демона spamd будут собирать-ся в файле /var/log/spamd.log. На стадии отладки для по-вышения информативности можно будет запускать spamd с ключом -v.

Типичный вывод выглядит следующим образом:

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

Если для протоколирования работы spamd вы исполь-зуете отдельный файл, то не забудьте добавить для него правило ротации в /etc/newsyslog.conf.

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

В данном случае в таблицу <spamd> фильтра pf зано-сятся все адреса из файла blacklist.txt. Все остальные ис-точники будут пропущены на реальный MTA. Если же до-бавить белый список:

то в таблицу <spamd> попадет содержимое blacklist.txt за исключением адресов, перечисленных в whitelist.txt. При-чем таким свойством «вычитания» обладает только белый список, приведенный в строке «all» непосредственно пос-ле имени черного.

«Серый» режимВ сером режиме, как было показано выше, белый список применяется явно, в то время как адреса, не представлен-ные ни в одном из списков, получают серый оттенок и об-рабатываются особым образом. Для реализации этого, во-первых, требуется дополнительная таблица и правило пе-ренаправления в /etc/pf.conf:

В итоге соединения, источник которых не включен в <spamd-white>, тоже будут перенаправляться на порт 8025. За формирование белого списка теперь отвечает сам spamd, ди-намически добавляя нужные адреса в таблицу <spamd-white>. За черный список по-прежнему отвечает spamd-setup.

Обратите внимание, что адреса, занесенные в белые списки spamd.conf, лишь исключаются из черных. То есть spamd будет воспринимать их как серые.

Во-вторых, чтобы spamd запустился в сером режиме, используется ключ «-g», который нужно указать в файле /etc/rc.d в строке pfspamd_flags:

Необязательный ключ «-G» задает временные интерва-лы соответственно для pastime, greyexp и whiteexp. Здесь же можно добавить ключ «-v», чтобы на период отладки полу-чать более подробную информацию о работе фильтра.

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

# /usr/local/sbin/spamd-setup -d

Getting http://www.openbsd.org/spamd/spews_list_level1.txt.gzblacklist spews1 18541 entriesGetting http://www.openbsd.org/spamd/spews_list_level2.txt.gzblacklist spews2 22641 entriesGetting http://www.openbsd.org/spamd/chinacidr.txt.gzblacklist china 321 entriesGetting http://www.openbsd.org/spamd/koreacidr.txt.gzblacklist korea 162 entriesblacklist myblack 1 entrieswhitelist mywhite 4 entries

!spamd*.* /var/log/spamd.log

# touch /var/log/spamd.log # kill �HUP c̀at /var/run/syslog.pid`

Jul 7 07:39:49 konst spamd[23]: 1.2.3.4: connected (2/2), lists: koreaJul 7 07:39:55 konst spamd[23]: (BLACK) 1.2.3.4: <[email protected]> -> <[email protected]>Jul 7 07:39:58 konst spamd[23]: 1.2.3.4: From: =?Windows-1251?B?gg6vPv4O3o5ewu?=Jul 7 07:39:58 konst spamd[23]: 1.2.3.4: To: [email protected] 7 07:39:58 konst spamd[23]: 1.2.3.4: Subject: =?Windows-1251?B?wg6vPv4O3o5ewu?=Jul 7 07:39:58 konst spamd[23]: 1.2.3.4: Body: <head>Jul 7 07:39:58 konst spamd[23]: 1.2.3.4: Body: <title></title>Jul 7 07:39:58 konst spamd[23]: 1.2.3.4: Body: </head>Jul 7 07:39:58 konst spamd[23]: 1.2.3.4: Body: <body bgcolor="#FFFFFF">Jul 7 07:39:58 konst spamd[23]: 1.2.3.4: Body: <p align="center">Jul 7 07:39:58 konst spamd[23]: 1.2.3.4: Body: <p align="right">Jul 7 07:39:58 konst spamd[23]: 1.2.3.4: disconnected after 9 seconds. lists: korea

all:\ :blacklist:

blacklist:\ :black:\ :msg="SPAM. Blocked by me":\ :Þle=/usr/local/etc/spamd/blacklist.txt:

all:\ :blacklist:whitelist:

blacklist:\ :black:\ :msg="SPAM. Blocked by me":\ :Þle=/usr/local/etc/spamd/blacklist.txt:

whitelist:\ :white:\ :Þle=/usr/local/etc/spamd/whitelist.txt:

table <spamd-white> persistrdr pass inet proto tcp from !<spamd-white> to ↵ any port smtp -> 1.2.3.25 port spamd

pfspamd _ ßags="-g �G 25:4:864 -v"

pfctl : /dev/fd/7: No such file or directory

18

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

Добиться нормальной работы удалось после ручного монтирования файловой системы дескрипторов fdescfs (см. man 5 fdescfs):

Как видно на представленном ниже листинге, spamd в «сером» режиме запускает еще два процесса – отвечаю-щий за обновление белого списка (процесс 6017) и за об-новление базы /var/db/spamd (процесс 6020):

Файл /var/db/spamd, хранящий информацию о поступив-ших запросах и их дальнейшей судьбе, создается автома-тически, когда spamd запускается с ключом -g. Посмотреть состав этой базы можно, если выполнить команду spamdb без параметров:

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

Если повторная попытка соединения будет выполнена спустя интервал pastime, но до истечения периода greye-xp, адрес заносится в таблицу <spamd-white>, и в дальней-шем соответствующие соединения пропускаются на MTA. Состав таблицы <spamd-white> можно посмотреть следу-ющей командой:

С помощью команды /usr/local/sbin/spamdb можно до-бавлять в базу данных новые «белые» адреса либо уда-лять имеющиеся:

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

вторные попытки) либо слишком частые попытки «протол-кнуть» вам свое письмо.

Используем ловушкиПри работе в «сером» режиме возможно использование так называемых ловушек – фиктивных адресов электронной поч-ты, которые в вашей системе отсутствуют. Если на такой адрес будет получено письмо, его отправитель автоматически зано-сится в черный список сроком на 24 часа. Хороший эффект дает использование в качестве ловушки популярных у спам-меров адресов (alex, max, oao, sales и др.). Подобная ловушка заносится в базу /var/db/spamd следующей командой:

Ключ -T позволяет добавить ловушку. Адреса, с которых будут выполняться попытки доставить почту на адрес ловуш-ки, заносятся в базу как TRAPPED и обрабатываются как при-надлежащие черному списку, пока не пройдут сутки с момен-та последней попытки соединения. Через 24 часа адрес уда-ляется из базы и вновь обрабатывается как «серый». С по-мощью ключа -t можно вручную добавить в базу адрес как «пойманный», как это показано для адреса 10.0.0.225.

Подробнее о ключах запускаSpamd помимо ключей g, G, v, которые нам уже встреча-лись, может быть запущен еще с несколькими полезны-ми опциями:! -b: указывается IP-адрес интерфейса, на котором spa-

md будет ожидать входящие соединения (по умолчанию прослушиваются все имеющиеся интерфейсы).

! -s: задает время задержки перед выводом каждого сим-вола в диалоге с отправителем, занесенным в один из черных списков. По умолчанию задано значение, рав-ное 1 секунде.

! -4 или -5: код ответа спаммеру, 450 (по умолчанию) или 550 соответственно.

! -c: максимальное число одновременных подключений.! -B: максимальное число одновременных подключений

для адресов, занесенных в черный список.! -n: строка, выводимая в баннере приветствия.! -d: запущенный с этим ключом spamd не переключает-

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

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

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

# mount _ fdescfs 7 /dev/fd/

6017 ?? Ss 0:00,02 spamd: (pf <spamd-white> update) (spamd)6018 ?? S 0:00,07 /usr/local/libexec/spamd -v -g -G5:1:26020 ?? S 0:00,00 spamd: (/var/db/spamd update) (spamd)

# /usr/local/sbin/spamdb

GREY|1.2.3.4|<[email protected]>|<[email protected]>|1120715668|1120719268|1120719268|1|0GREY|5.6.7.8|<[email protected]>|<[email protected]>|1120716752|1120720352|1120720352|1|0WHITE|10.0.0.203|||1120715625|1120717099|1120724330|2|0

# pfctl -t spamd-white -Tshow

10.0.0.203

# /usr/local/sbin/spamdb

GREY|1.2.3.4|<[email protected]>|<[email protected]>|1120715668|1120719268|1120719268|1|0GREY|5.6.7.8|<[email protected]>|<[email protected]>|1120716752|1120720352|1120720352|1|0WHITE|10.0.0.203|||1120715625|1120717099|1120724330|2|0

root# /usr/local/sbin/spamdb -d 10.0.0.203root# /usr/local/sbin/spamdb

GREY|1.2.3.4|<[email protected]>|<[email protected]>|1120715668|1120719268|1120719268|1|0GREY|5.6.7.8|<[email protected]>|<[email protected]>|1120716752|1120720352|1120720352|1|0

root# /usr/local/sbin/spamdb -a 10.161.193.253root# /usr/local/sbin/spamdb

WHITE|10.0.0.203|||1120730510|1120730510|1123840910|1|0GREY|1.2.3.4|<[email protected]>|<[email protected]>|1120715668|1120719268|1120719268|1|0GREY|5.6.7.8|<[email protected]>|<[email protected]>|1120716752|1120720352|1120720352|1|0

# /usr/local/sbin/spamdb -T -a "<[email protected]>"# /usr/local/sbin/spamdb -t -a 10.0.0.225# /usr/local/sbin/spamdb | grep TRAP

SPAMTRAP|[email protected]|10.0.0.225|1120817623

19№7, июль 2005

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

на Python несложный скрипт, который будет заносить белые адреса в базу /var/db/spamd из текстового файла:

Приведенный сценарий считывает данные из текстово-го файла, передаваемого как аргумент командной строки, и заносит их в базу spamdb, используя команду /var/local/sbin/spamdb -a. Формат текстового файла не допускает коммента-риев, пустых строк и т. д. Он может содержать только IP-адре-са или подсети в формате CIDR, по одной записи в строке:

Подсети, определяемые по наличию символа «/», функ-цией Expand «разворачиваются» в список отдельных IP-адресов whitelist, который затем поэлементно передается программе spamdb. Если длина маски задана неправильно, то сценарий оставляет запись как есть, возлагая обработку ошибки на утилиту spamdb (вторая запись в файле wl.txt де-монстрирует поведение в этом случае). Если отладка вклю-чена (переменная DEBUG не равна 0), то каждая попытка и ее результат будут отображаться на экране:

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

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

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

Листинг 1. Сценарий a2w.py

#!/usr/local/bin/python

import sys, os

def Usage(): print 'Usage: a2w.py Þlename' sys.exit(-1)

# Подпрограмма «разворачивает» подсеть в список адресовdef Expand(subnet): global whitelist

if subnet.Þnd(�/�) == -1: subnet = subnet + '/32' netaddr, masklen = subnet.split('/') masklen = int(masklen)

# Если ошибка � оставляем запись как есть if masklen < 1 or masklen > 32: whitelist.append(subnet) return

# Здесь используется синтаксис «расширенного списка» �# результат будет получен как список значений функции int# для каждого элемента в списке, возвращаемом функцией split o1, o2, o3, o4 = [int(o) for o in netaddr.split('.')] for i in range(0, 2 ** (32 - masklen + 1)): addr = '%d.%d.%d.%d' % (o1, o2, o3, o4) whitelist.append(addr) o4 += 1 if o4 == 256: o3 += 1; o4 = 0 if o3 == 256: o2 += 1; o3 = 0 if o2 == 256: o1 += 1; o2 = 0# Если нельзя, но очень хочется � то можно!# (Это про несколько операторов в одной строке�)

#----------------------------------------------if len(sys.argv) != 2: Usage()

DEBUG = 1errcnt = 0spamdbcmd = '/usr/local/sbin/spamdb'Þlelist = open(sys.argv[1], 'r').readlines()whitelist = []for line in Þlelist: Expand(line[:-1])

for addr in whitelist: cmd = spamdbcmd + ' -a ' + addr

# Запятая после аргументов команды print # оставляет курсор на текущей строке if DEBUG: print 'Try: ' + cmd,

# Функция os.system вернет 0, если указанная # как аргумент команда будет выполнена успешно err = os.system(cmd) if err: errcnt += 1 if DEBUG: print 'Failed' else: if DEBUG: print 'ok'

if errcnt: print 'WARNING: executed with errors (see above)'

# cat wl.txt

10.10.29.192/291.2.3.4/33

# ./a2w.py wl.txt

Try: /usr/local/sbin/spamdb -a 10.20.29.192 okTry: /usr/local/sbin/spamdb -a 10.20.29.193 okTry: /usr/local/sbin/spamdb -a 10.20.29.194 okTry: /usr/local/sbin/spamdb -a 10.20.29.195 okTry: /usr/local/sbin/spamdb -a 10.20.29.196 okTry: /usr/local/sbin/spamdb -a 10.20.29.197 okTry: /usr/local/sbin/spamdb -a 10.20.29.198 okTry: /usr/local/sbin/spamdb -a 10.20.29.199 okTry: /usr/local/sbin/spamdb -a 10.20.29.200 okTry: /usr/local/sbin/spamdb -a 10.20.29.201 okTry: /usr/local/sbin/spamdb -a 10.20.29.202 okTry: /usr/local/sbin/spamdb -a 10.20.29.203 okTry: /usr/local/sbin/spamdb -a 10.20.29.204 okTry: /usr/local/sbin/spamdb -a 10.20.29.205 okTry: /usr/local/sbin/spamdb -a 10.20.29.206 okTry: /usr/local/sbin/spamdb -a 10.20.29.207 okspamdb: invalid ip address 1.2.3.4/33Try: /usr/local/sbin/spamdb -a 1.2.3.4/33 FailedWARNING: executed with errors (see above)

# /usr/local/sbin/spamdb | grep WHITE

WHITE|10.20.29.192|||1120801435|1120801442|1123911842|1|1WHITE|10.20.29.193|||1120801435|1120801442|1123911842|1|1WHITE|10.20.29.194|||1120801435|1120801442|1123911842|1|1WHITE|10.20.29.195|||1120801435|1120801442|1123911842|1|1WHITE|10.20.29.196|||1120801435|1120801442|1123911842|1|1WHITE|10.20.29.197|||1120801435|1120801442|1123911842|1|1WHITE|10.20.29.198|||1120801436|1120801442|1123911842|1|1WHITE|10.20.29.199|||1120801436|1120801442|1123911842|1|1WHITE|10.20.29.200|||1120801436|1120801442|1123911842|1|1WHITE|10.20.29.201|||1120801436|1120801442|1123911842|1|1WHITE|10.20.29.202|||1120801436|1120801442|1123911842|1|1WHITE|10.20.29.203|||1120801436|1120801442|1123911842|1|1WHITE|10.20.29.204|||1120801436|1120801442|1123911842|1|1WHITE|10.20.29.205|||1120801436|1120801442|1123911842|1|1WHITE|10.20.29.206|||1120801436|1120801442|1123911842|1|1WHITE|10.20.29.207|||1120801436|1120801442|1123911842|1|1

20

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

Устанавливаем контроллер KerberosНачнем установку сервера Heimdal на компьютере с ОС Linux. Если Heimdal не включен в состав вашего дистри-бутива, то вы можете получить исходный код Heimdal с ftp-сервера Стокгольмского университета (ftp://ftp.pdc.kth.se/pub/heimdal/src), сконфигурировать и скомпилиро-вать его.

Опции конфигурации позволяют вам собрать Heimdal в виде разделяемых библиотек, что в дальнейшем упрощает сборку программ с поддержкой Kerberos, и установить He-imdal в каталог /usr. При этом пользовательские програм-мы (kinit, klist, telnet и т. д.) записываются в каталог /usr/bin, программы для удаленного администрирования контрол-лера Kerberos – в /usr/sbin, а серверная часть Kerberos – в /usr/libexec.

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

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

Далее нужно проделать две вещи: создать конфигу-рационный файл kdc и инициализировать (заселить не-сколькими основными принципалами) базу данных Ker-beros. Конфигурационный файл (/etc/krb5.conf) использу-ется как сервером Kerberos, так и приложениями, собран-ными с поддержкой Kerberos. Поэтому этот файл (практи-чески без изменений) можно перенести на все компьюте-ры, входящие в ваш сектор (будем считать, что его домен-ное имя myreal.ru).

В этом файле содержится необходимый минимум на-строек Kerberos – название сектора по умолчанию (строка, которая будет добавляться к именам принципалов без до-менной части), расположение серверов Kerberos : kdc, сер-вера удаленного администрирования и их лог-файлов. В ка-честве альтернативы для передачи настроек Kerberos мож-но использовать службу DNS, для чего в файл зоны для до-мена myrealm.ru нужно добавить записи (предполагается, что адрес для kdc уже записан в файле зоны):

Передача настроек Kerberos по DNS полезна при боль-шом числе клиентских компьютеров, когда синхронизиро-вать файлы /etc/krb5.conf вручную сложно.

Теперь можно приступать к пополнению баз данных Kerberos.

Ключ -l позволяет запускать kadmin в локальном режи-ме без аутентификации в Kerberos. Команда init создает ба-зу данных Kerberos и заселяет ее несколькими принципала-ми со случайным образом сгенерированными ключами для сервисов, предоставляемых самим Kerberos. Это krbtgt/MY-REALM.RU для Ticket Granting Service, kadmin/admin для сер-виса kadmind и kadmin/changepw для сервиса kpasswd, поз-

РАЗВЁРТЫВАЕМ HEIMDAL KERBEROSРАЗВЁРТЫВАЕМ HEIMDAL KERBEROS

Мы изучили принципы работы KerberosМы изучили принципы работы Kerberos

и взглянули на него с пользовательской точки и взглянули на него с пользовательской точки

зрения [1]. Теперь перейдем к практическойзрения [1]. Теперь перейдем к практической

части и начнем развертывать инфраструктуру части и начнем развертывать инфраструктуру

Kerberos в локальной сети.Kerberos в локальной сети.

МИХАИЛ КОНДРИН

tar xzvf heimdal-0.6.3.tar.gzcd heimdal-0.6.3./conÞgure --preÞx=/usr --enable-sharedmake make install

mkdir /var/heimdalchmod 600 /var/heimdal

[libdefaults] default _ realm=MYREALM.RU[realms] MYREALM.RU={ kdc=kdc.myrealm.ru admin _ server=kdc.myrealm.ru kpasswd _ server = kdc.myrealm.ru }[logging] kdc=FILE:/var/log/krb5kdc.log admin _ server=FILE:/var/log/kadmin.log default=FILE:/var/log/krb5.log

_ kerberos TXT "MYREALM.RU"kerberos CNAME kdc_ kerberos. _ udp SRV 0 0 88 kdc_ kerberos. _ tcp SRV 0 0 88 kdc_ kerberos-adm. _ tcp SRV 0 0 749 kdc_ kpasswd. _ udp SRV 0 0 464 kdc

sudo /usr/sbin/kadmin -lkadmin>init MYREALM.RUkadmin>add admin/[email protected]>add [email protected]> add --random-key host/[email protected]>ext */[email protected]

21№7, июль 2005

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

воляющего пользователям менять свой пароли в Kerberos. Принципал kadmin/hprop, также создаваемый при инициали-зации Kerberos, используется при синхронизации баз данных между дополнительными и основным контроллерами секто-ра Kerberos, и в нашем случае он не актуален. С помощью ко-манда add в эту вновь созданную базу записываются пользо-ватели и сервисы. В данном случае добавляются пользова-тели – администратор Kerberos (admin/admin), еще один ря-довой пользователь (mike) и принципал для компьютера, на котором работает контроллер Kerberos (host/kdc.myrealm.ru). В отличие от первых двух случаев для сервиса пароль вы-бирается случайным образом (ключ – random-key), посколь-ку знать его ни администратору Kerberos, ни тем более ря-довым пользователям необязательно. Затем этот ключ из-влекается из базы данных Kerberos (команда ext) и дописы-вается в файл /etc/krb5.keytab. Керберизованные серверные программы знают, что их «пароли» записаны в этом файле и при подключении клиента (см. схему работы Kerberos, изло-женную выше) могут извлечь свой пароль оттуда. В данном случае права root для запуска kadmin необходимы, посколь-ку в результате помимо файла /etc/krb5.keytab в папке /var/heimdal, куда запись простым пользователям запрещена, со-здается файл heimdal.db с паролями принципалов.

Теперь все готово для запуска сервера kdc. Если по-сле команды:

в log-файле появились сообщения вида:

значит, сервер успешно стартовал и можно переходить к запуску сервера удаленного администрирования kadmind (749/tcp-порт) и службы смены паролей kpasswdd (464/udp-порт).

Хотя для смены паролей можно использовать программу kadmin (/usr/sbin/kadmin passwd mike), но для пользователей более удобно проделать то же самое с помощью утилиты kpasswd, которая подключается к службе kpasswdd.

Поскольку сервис kadmind нужен не очень часто (при добавлении/удалении принципалов), то имеет смысл ис-пользовать его вызов в сервере inetd (xinetd). Для этого вам, во-первых, нужно убедиться, что ссылки на сервисы, собранные с поддержкой Kerberos (и kadmind в том числе) присутствуют в файле /etc/services. Необходимые для это-го данные содержатся в файле heimdal-0.6.3/etc/services.append в дистрибутиве heimdal. Во-вторых, нужно добавить запись, касающуюся сервера удаленного администрирова-ния, в файл /etc/inetd.conf и перeзапустить inetd.

В то же время kpasswdd может работать только как са-мостоятельная служба, и организовать его вызов с помо-щью inetd невозможно.

Контроль доступа к kadmind и управлению пользовате-лями Kerberos обеспечивается списками, хранящимися в файле /var/heimdal/kadmin.acl. Разумная политика – предо-ставить администратору (admin/admin) полный контроль по управлению записями Kerberos, а всем остальным – позво-лить лишь менять свои пароли. Для такой цели достаточно иметь такой acl-файл:

Для проверки работоспособности сервера Kerberos по-пробуйте аутентифицироваться на нем (как администра-тор) и посмотреть содержимое его баз данных:

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

Настраиваем серверные программыНастройка серверов приложений достаточно проста (при условии, что на сервере работает UNIX-подобная система). Во-первых, устанавливайте дистрибутив Heimdal, как опи-сано выше. Этого уже достаточно, чтобы компьютер (пред-положим, что его сетевое имя server.myrealm.ru) работал как клиент Kerberos, нужно только скопировать файл krb5.conf с сервера Kerberos на настраиваемый компьютер. Конфи-гурационный файл можно не редактировать – приведенный выше файл подойдет как для серверов, так и рабочих стан-ций. Кроме того, как уже говорилось, на хосте с сетевыми сервисами должен присутствовать файл /etc/krb5.keytab с набором ключей для этих сетевых служб (точнее, для при-нципалов Kerberos, соответствующим этим сетевым служ-бам). Также сервису должно быть известно имя принципала, который представляет его в Kerberos. Как правило, этот па-раметр настраивается для каждого сервиса индивидуально (с помощью конфигурационных файлов) или используют-ся какие-то фиксированные значения. В любом случае вам придется изучить документацию, предлагаемую разработ-чиками программы. Как уже говорилось ранее, для серви-сов используются имена, состоящие из трех компонентов – поле instance содержит сетевое имя компьютера, а основ-ное имя обозначает тип предлагаемого сервиса. Предпо-ложим, вы хотите установить все сервисы, входящие в дис-трибутив Heimdal (telnet, ftp, несколько r*-служб). Для этого регистрируйтесь в Kerberos как администратор, добавляе-те принципалов host/[email protected], ftp/[email protected] и извлекаете их ключи в локальный /etc/krb5.keytab файл.

/usr/libexec/kdc -c /etc/krb5.conf --detach

2005-03-15T23:43:46 listening on IPv4:127.0.0.1 port 88/udp2005-03-15T23:43:46 listening on IPv4:127.0.0.1 port 88/tcp

/usr/libexec/kadmind/usr/libexec/kpasswdd

kerberos-adm stream tcp nowait root ↵ /usr/libexec/kadmind kadmind

admin/[email protected] all*@MYREALM.RU cpw

kinit -p admin/adminkadminkadmin> list *

kinit admin/adminkadminkadmin>add --random-key host/[email protected]>add --random-key ftp/[email protected]

22

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

Если вы ошиблись – добавили в /etc/krb5.keytab ключ службы, которая не используется на данном компьютере, то для управления ключами в файле /etc/krb5.keytab пред-назначена утилита ktutil. Удалить лишнюю запись мож-но командой /usr/sbin/ktut il remove -p ftp/server.myrealm.ru, точно так же, как и просмотреть все записи в keytab-фай-ле (ktutil list) или добавить новый ключ (ktutil get ftp/server.myrealm.ru).

Теперь настроим запуск сервисов через демон inetd, для чего нужно добавить следующие строки в файл inetd.conf (не забудьте также добавить записи из файла heimdal-0.6.3/etc/services.append к системному файлу /etc/services):

Почти все сервисы стандартные, shell/kshell/ekshell – это вариации на тему rshd. Первый из них работает просто как «заглушка», выдает сообщение об ошибке, если поль-зователь подключается по старинке, без TGT. Второй и тре-тий – керберизованные сервисы, использующие Kerberos в последнем случае с шифрованием трафика. Нестандар-тным является сервис kx (использует 2111/tcp-порт), кото-рый предназначен для организации соединений по X-про-токолу через шифрованный канал. Если вы, например, под-ключитесь к серверу server.myrealm.ru с помощью команды rxtelnet server.myrealm.ru, то при успешном соединении на вашем X-сервере откроется окно xterm с командным интер-претатором, запущенном на удаленном компьютере (server.myrealm.ru). Вся графика при этом будет прозрачно пере-адресовываться на вашу рабочую станцию. В некотором смысле мы имеем аналог ssh – X server.myrealm.ru.

Поскольку время действия любого сертификата Kerbe-ros ограничено, то одной из задач при настройке сектора Kerberos является синхронизация времени между компью-терами в локальной сети. Локальное время компьютера ис-пользуется клиентами Kerberos при запросе на выдачу би-лета, и если это время значительно отличается от времени контроллера Kerberos (более чем на 5 минут), то такие за-просы отвергаются. Так что бесполезно, например, пред-лагать контроллеру Kerberos просроченный TGT, просто пе-реведя часы на локальном компьютере. Но с другой сторо-ны, удаленный доступ к какому-то компьютеру также мо-жет быть невозможным только потому, что его часы опе-режают часы контроллера Kerberos, скажем, на 10 минут. Поэтому синхронизация времени внутри сектора необхо-дима для корректного функционирования Kerberos. Если у вас в локальной сети уже работает сервер ntp, то мож-но воспользоваться им. Об установке и настройке сервера ntpd написано в статье [2]. Однако для целей Kerberos до-статочно, если вы выберете какой-то из компьютеров в ва-шей сети (допустим, тот же самый server.myrealm.ru) в ка-честве эталонного и будете сверять по нему часы осталь-

ных компьютеров (и контроллера Kerberos в том числе) по протоколу time. Служба time уже встроена в сервер inetd, нужно только убедиться, что в файле /etc/inetd.conf не за-комментирована строка:

Синхронизация осуществляется с помощью базовой UNIX-утилиты netdate server.myrealm.ru. Для рабочих стан-ций ее достаточно запускать при загрузке, для серверов, которые перегружаются не так часто, имеет смысл вызы-вать ее периодически с помощью демона cron.

Еще один технический вопрос – вопрос о правах, кото-рые нужно выставить на keytab-файл. Поскольку он содер-жит пароли сетевых служб, то первая мысль, которая при-ходит в голову, ограничить к нему доступ так же, как и к /etc/shadow – чтение только для root. Но сервисы тоже должны иметь возможность извлекать свои ключи из этого файла, т.е. Keytab-файл также должен быть открыт для чтения поль-зователем, с правами которого запущены сервисы. В нашем случае это замечание не столь важно, поскольку все сер-висы работают с правами root, но бывает ситуации, когда нужно дать доступ к keytab-файлу непривилегированным службам. В таком случае стоит завести специальную груп-пу и занеcти в нее всех системных пользователей, исполь-зуемых керберизованными службами, а файл /etc/krb5.key-tab открыть для чтения этой группе.

Настраиваем рабочие станцииДля этого достаточно иметь упоминавшийся выше конфи-гурационный файл /etc/krb5.conf и собственно сам дистри-бутив heimdal. Но бывает также удобно настроить систем-ный login на этой рабочей станции таким образом, чтобы при входе на компьютер, пользователь автоматически получал TGT с контроллера Kerberos. Для рабочих станций под уп-равлением Linux такой функциональности можно добить-ся, заменив системный login (/bin/login) на керберизован-ный аналог из состава Heimdal (/usr/bin/login). Проще все-го это сделать, отредактировав файл /etc/inittab:

и заменив default run-level на 5. Таким образом, по умолча-нию загрузка компьютера будет осуществляться в кербери-зованном режиме, а для аварийных ситуаций у админист-ратора компьютера сохраняется возможность заходить на компьютер в стандартном режиме (в run-level 1,2,3). Следу-ет только иметь в виду, что керберизованный login запраши-вает помимо собственно супербилета еще и session ticket для доступа к рабочей станции. Как вы понимаете, это тре-бует наличия принципала, соответствующего данной ра-бочей станции в базе данных Kerberos и ее ключа в файле /etc/krb5.keytab. Заметим также, что если по каким-то при-чинам аутентификация пользователя на сервере Kerberos закончилась неудачей, то login переключается в стандарт-ный режим и аутентифицирует пользователя по локально-му файлу /etc/shadow.

telnet stream tcp nowait root ↵ /usr/libexec/telnetd telnetd -L /usr/bin/loginftp stream tcp nowait root /usr/libexec/ftpd ftpdshell stream tcp nowait root /usr/libexec/rshd rshd ↵ -vkshell stream tcp nowait root ↵ /usr/libexec/rshd rshd -kekshell stream tcp nowait root /usr/libexec/rshd ↵ rshd -kx kx stream tcp nowait root /usr/libexec/kxd kxd

time dgram udp wait root internal

c1:123:respawn:/sbin/agetty 38400 tty1 linuxc2:123:respawn:/sbin/agetty 38400 tty2 linuxk1:5:respawn:/sbin/agetty -l /usr/bin/login 38400 tty1 linuxk2:5:respawn:/sbin/agetty -l /usr/bin/login 38400 tty2 linux

kadmin>ext */[email protected]

23№7, июль 2005

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

Для рабочих станций под управлением Windows2000/XP получить такую же функциональность несколько слож-нее. Во-первых, авторы Heimdal не предлагают свой про-дукт в виде стандартного Windows-приложения, и Heimdal может работать только в Cygwin-окружении (www.cygwin.com) – эмуляторе POSIX-системы для Windows. Вы можете установить Cygwin целиком с помощью установщика, ко-торый можно скачать с сайта cygwin и затем скомпилиро-вать исходный код Heimdal. Гораздо проще, однако, взять уже готовые бинарные пакеты Heimdal и урезанную вер-сию Сygwin с ftp-сервера Стокгольмского университета: ftp://ftp.pdc.kth.se/pub/heimdal/binaries/i386-pc-cygwin/latest <http://www.cygwin.com/>. Поскольку Cygwin для приложе-ний, запущенных в нем, выглядит как полное UNIX-окруже-ние, то дальнейшая конфигурация ничем не отличается от установки под Linux.

После установки Cygwin и Heimdal пользователь по край-ней мере может аутентифицироваться на сервере Kerberos, запустив терминал Cygwin и введя команду kinit. Получен-ный сертификат в дальнейшем может быть использован клиентскими программами из дистрибутива Heimdal (ftp, telnet и т. д.).

При этом остаются две проблемы – заставить Heimdal использовать ваше имя и пароль, введенный при входе в Windows для аутентификации на сервере Kerberos, и обес-печить доступ к Kerberos не только для Cygwin, но и Windows-приложений. К сожалению, только средствами Heimdal эти проблемы не решаются.

Разберемся со второй проблемой. Хотя библиотеки Cygwin, и библиотеки Heimdal в том числе, являются стан-дартными, динамически линкуемыми библиотеками Win-dows, но использование их для приложений Windows не-возможно (подробнее об этом написано на сайте cygwin – http://cygwin.com/faq.html). Поэтому для Windows-приложе-ний есть две возможности – или использовать API предла-гаемой самой Windows, или использовать библиотеки MIT-Kerberos, которые доступны в Windows-версии, но при этом бесполезны для Cygwin-приложений. Возникает вопрос – какие из библиотек лучше установить на свой компьютер? Правильный ответ – ставить все! Пакет Support Tools от Mi-crosoft [3] включает в себя две утилиты ksetup и kpasswd, с помощью которых можно настроить получение начальных сертификатов Kerberos при входе пользователя на рабочую станцию, а пакет Kerberos-For-Windows от МТИ [5] позволя-ет обеспечить доступ к этим сертификатам как для библи-отек MIT-Kerberos, так и Heimdal.

Так что начнем с настройки керберизованного входа в Windows. Я использую WindowsXP-Pro без сервиспаков, но тот же метод работает и для более новых версий Windows. Установка Support Tools не должна вызвать затруднений. Затем вам нужно добавить принципала для этой машины (для определенности назовем ее xp.myrealm.ru) в базу дан-ных Kerberos. Сделать это можно, например, из терминала Cygwin (я полагаю, что вы уже настроили Heimdal в нем), но в отличие от рабочих станций, под управлением LInux вам нужно будет придумать пароль для этого компьютера:

kinit admin/adminkadmin kadmin>add -pw passwordforWinXP host/[email protected]

24

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

Затем с помощью утилиты ksetup.exe, зайдя на маши-ну под администраторским логином, из командной строки Windows вы должны указать название сектора Kerberos, адрес контроллера Kerberos и ввести пароль для машины (тот самый, что вы только что придумали):

После чего перегрузить компьютер. При загрузке маши-ны обратите внимание, что форма с приглашением входа в Windows изменилась. На ней должно появиться еще од-но поле выбора с двумя вариантами – зарегистрировать-ся на компьютере xp.myrealm.ru или в секторе Kerberos MY-REALM.RU. Но второй вариант пока не работоспособен, т.к. вы еще не настроили соответствия между локальными име-нами пользователей и именами принципалов Kerberos. Так что вам нужно снова войти на компьютер как Администра-тор и настроить эти соответствия.

Тут есть два варианта:

В первом случае каждый принципал из базы данных Kerberos отображается на пользователя Windows c тем-же именем (только без доменной части). Во втором слу-чае (если вас такая политика не устраивает) вы разре-шаете только определенному пользователю (mikeXP) ау-тентифицироваться в Kerberos под именем принципала [email protected].

Так или иначе, но теперь вы можете при входе на рабо-чую станцию одновременно получать сертификаты Kerbe-ros. Но этот сертификат хранится в памяти, а не на диско-вом файле, как у Heimdal, и доступ к нему осуществляет-ся посредством API Windows. Чтобы сделать его доступ-ным для Heimdal, нужно воспользоваться утилитой ms2mit из пакета MIT-Kerberos, разработчики которого работают в тесном контакте с Microsoft и поэтому представляют себе особенности ее реализации Kerberos.

Установка MIT-Kerberos очень проста. Помимо инстал-лятора [4] они предлагают свой пакет в виде обычного zip-архива [6], который можно распаковать в удобный для вас каталог. Не стоит только устанавливать его в директорию Program Files, т.к. она входит в переменную PATH Cygwin, что может привести к конфликтам между одноименными ути-литами Heimdal и MIT-Kerberos. Так что лучше распаковать его в какой-нибудь из каталогов на диске C: (у меня это С:\kfw-2.6.5). Помимо утилиты ms2mit, в него входят уже зна-комый вам набор стандартных утилит Kerberos (kinit, klist, kdestroy) и также графический интерфейс к ним (Leash32). После установки MIT-Kerberos вам нужно настроить Heim-dal и MIT-Kerberos таким образом, чтобы они использова-ли один и тотже кэш сертификатов, с тем чтобы начальный сертификат, полученный с помощью одной из этих библи-отек, был бы автоматически доступен и другой. У Heimdal кэш – это (как вы помните) файл с именем krb5cc_ + id поль-зователя во временном каталоге (временный каталог Cyg-win – это С:\Cygwin\tmp), но это название можно поменять с помощью переменной окружения Сygwin KRB5CCNAME.

C:> ksetup /setdomain MYREALM.RUC:> ksetup /addkdc MYREALM.RU kdc.myrealm.ruC:> ksetup /setcomputerpassword passwordforWinXP

C:> ksetup /mapuser * *C:> ksetup /mapuser [email protected] mikeXP

25№7, июль 2005

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

У MIT-Kerberos в дефолтной установке используется кэш в памяти, но его можно настроить на использование диско-вого файла. Сделать это можно с помощью установки пе-ременной окружения Windows (KRB5CCNAME) и записей в реестре Windows HKCU\Software\MIT\Kerberos5\ccname, HKLM\Software\MIT\Kerberos5\ccname. Системой использу-ется первое непустое значение в этой последовательнос-ти или значение по умолчанию – «API:». Я использую bat-файл, запускаемый при входе в Windows, который устанав-ливает переменную окружения KRB5CCNAME на название файла, используемого Heimdal, и затем перемещает сер-тификат Windows в этот файл утилитой ms2mit. Для каж-дого из пользователей Windows этот файл свой, поскольку значение KRB5CCNAME зависит от идентификатора этого пользователя в Сygwin-окружении.

То же самое вы можете проделать с помощью програм-мы Leash32 (меню «Action → Import Ticket(s)/Token(s)»), так же как просматривать/удалять имеющиеся сертификаты и настраивать кэш сертификатов (меню «Options → Kerbe-ros v5 Properties Dialog»).

Здесь имеется еще одна ловушка, заботливо расстав-ленная компанией Microsoft. Для большей безопасности в установке по умолчанию Support Tools экспорт начального сертификата из памяти Windows запрещен, что делает его использование бесполезным для MIT-Kerberos и Heimdal. К счастью (точнее, благодаря давлению со стороны разра-ботчиков из MIT), Microsoft оставила ключи в реестре, с по-мощью которых можно снять этот запрет. Так что, для то-го чтобы утилита ms2mit работала, в реестре должны быть установлены значения:

ЗаключениеЕще несколько слов о совместимости различных версий Kerberos. Как вы могли только что убедиться, билетики, получаемые от сервера Heimdal, работают во всех верси-ях клиентов Kerberos (Microsoft, MIT, Heimdal). То же самое верно, если бы в качестве сервера использовался KDC от MIT. Пример же использования библиотеки MIT-Kerberos в домене Windows 2000 c Active Directory, где реализован сервер Kerberos от Microsoft, разобран в статье [7]. Так что на уровне протокола совместимость между реализация-ми удовлетворительная. В то же время на уровне API сов-местимость даже между Heimdal и MIT Kerberos оставля-ет желать лучшего.

Для того чтобы приложение (клиент или сервер) могло использовать Kerberos, соответствующая поддержка долж-на быть заложена в код программы. Реализация протоко-ла Kerberos c нуля сложна, поэтому, как правило, приложе-ние использует динамические библиотеки Kerberos. Реали-зации от MIT пользуется большей популярностью, поэтому, скорее всего, интересующее вас приложение будет исполь-

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

Это замечание особенно актуально для Windows. Мно-гие керберизованные приложения, разработанные под UNIX-системы, можно использовать в Windows в среде Cyg-win, поскольку для авторов портирование под Cygwin дает-ся легче, чем перелицовывание программы под полноцен-ное Windows-приложение. Единственная реализация Ker-beros, доступная для такого рода программ, – это Heimdal, и вам следует убедиться, что интересующее вас приложе-ние поддерживает Heimdal. Удивительно, хотя MIT-Kerberos и разрабатывается под UNIX-системы, но в Cygwin-окруже-нии он неработоспособен.

Исключением является ситуация, когда приложение ис-пользует Kerberos не напрямую, а через интерфейс GSSAPI. Примером такого приложения является ftp из дистрибути-ва Heimdal. GSSAPI (Generic Security Service Application Pro-gram Interface) – это интерфейс, обеспечивающий стандар-тизованный доступ к функциям аутентификации Kerberos. Как MIT-Kerberos, так и Heimdal предлагают свои реализа-ции GSSAPI, поэтому в данном случае обе библиотеки ока-зываются полностью взаимозаменямыми.

На этом установку Kerberos в гетерогенной сети можно считать завершенной. В итоге вы можете управлять регис-трационной информацией пользователей из одного места (сервера kdc). Ваши пользователи получают регистрацию в секторе Kerberos при входе на свои рабочие станции, про-зрачный доступ к компьютерам внутри сети с помощью ко-манд telnet и rsh, удаленный доступ к файлам при помощи ftp и rcp, шифрованный канал доступа к X-серверам. Ра-зумеется, количество керберизованных сервисов не огра-ничивается только службами из состава Heimdal, но уста-новка и конфигурирование других сервисов требует отде-льного обсуждения.

Литература, ссылки:1. Кондрин М. Изучаем принципы работы Heimdal Ker-

beros. – Журнал «Системный администратор», №6, 2005 г. – 56-59 с.

2. Платов М. Атомные часы на вашем столе. – Журнал «Си-стемный администратор», №4, 2004 г. – 16-21 с.

3. ht tp: / /www.microsof t.com/downloads /detai ls.aspx? familyid=49AE8576-9BB9-4126-9761-BA8011FABF38&displaylang=en.

4. http://web.mit.edu/kerberos/www/dist/kfw/2.6/kfw-2.6.5/MITKerberosForWindows-2.6.5.exe.

5. http://web.mit.edu/kerberos/www/dist/kfw/2.6/kfw-2.6.5/MITKerberosForWindows-2.6.5.exe;

6. http://web.mit.edu/kerberos/www/dist/kfw/2.6/kfw-2.6.5/kfw-2-6-5.zip.

7. Гребенников Р. Танцуем самбу. – Журнал «Системный администратор», №11, 2004 г. – 32-38 с.

set KRB5CCNAME = FILE:C:\Cygwin\tmp\krb5cc _ 1017ms2mit

HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters AllowTGTSessionKey = 0x01 (DWORD)HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos AllowTGTSessionKey = 0x01 (DWORD)

26

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

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

Размещение бюджетной информации в LDAP – это отде-льная большая тема. Ей посвящено много руководств и да-же учебников. Вы можете воспользоваться рекомендациями из заметок [1] на эту тему. Кроме того, использование LDAP зачастую является стандартнным для некоторых платформ. Поэтому предположим, что данный вопрос уже решен. Вся дальнейшая работа будет производится в среде SuSE Linux с уже настроенным хранением бюджетов в OpenLDAP, напри-мер, так как это сделано согласно требованиям Samba PDC. Теперь к такой системе добавляем Kerberos. Воспользуем-ся открытой версией Kerberos, что поставлялась в SuSE до версии 9.3 – Heimdal. С версии 9.3 в SuSE произошел пере-ход на Kerberos от MIT, в опциях настройки которого отсутс-твует возможность работы с LDAP, поэтому далее эту реа-лизацию Kerberos не будем рассматривать.

Итак, в OpenLDAP уже хранятся аутентификационные данные, соответствующие системным службам в атрибуте userPassword, аутентификационные данные, соответствую-

Системы аутентификации на основе стандартов Ker-beros все чаще используются в практических реше-ниях. Безусловно, Kerberos обладает массой при-

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

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

НАСТРАИВАЕМ KERBEROS ПОВЕРХ LDAPНАСТРАИВАЕМ KERBEROS ПОВЕРХ LDAP

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

Сегодня мы рассмотрим настройку открытой версии Kerberos Heimdal для работы с OpenLDAP

в качестве хранилища учетных данных. Такое решение позволит вам создать однородную

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

пользователей в Linux.

27№7, июль 2005

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

щие Samba в атрибутах sambaLMPassword и sambaNTPass-word. Если в систему добавится Kerberos, то дополнительно каждому бюджету будет сопоставлены данные о принци-пале Kerberos. Это тот же пароль и права на участие в от-ношениях внутри определенной области Kerberos (Kerbe-ros realm). Далее рассмотрим настройку Kerberos, работа-ющего с LDAP, по шагам.

Собираем HeimdalДа-да, собираем. Оказывается, стандартный Heimdal, пос-тавляемый в SuSE, собирается без поддержки LDAP. Для проверки установим дистрибутивные пакеты:

И посмотрим, с какими библиотеками скомпонован де-мон kdc:

Так как ссылок на ldap нет, то придется пересобрать Heimdal заново. Для этого установим исходные тексты:

Можно даже взять версию поновее с сайта разработчи-ков [2]. Режим сборки задается в файле rpm-спецификации в строках, где производится конфигурирование пакета пе-ред непосредственным выполнением команды make. Загля-нем в оригинальный файл rpm-спецификации:

Читаем предупреждение. Не верим. Снимаем коммен-тарий с управляющей переменной и собираем пакеты зано-во. Протокол сборки завершается сообщениями об успеш-ной записи новых rpm:

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

Проверяем, что теперь сборка выполнена с поддерж-кой LDAP:

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

Настраиваем OpenLDAPВ отличие от NSS и PAM сервер Kerberos не имеет спе-циального файла настройки LDAP-клиента. В отличие от Postfix, Squid, Courier-IMAP он не имеет также опций на-стройки LDAP-клиента в своих конфигурационных фай-лах. И это совершенно правильное решение. Дело в том, что если подключения Kerberos к LDAP будет использо-вать уязвимый способ аутентификации, то грош цена всей остальной системной безопасности, которую несет техно-логия Kerberos. Защита внутри Kerberos, а в предлагаемом способе подключения LDAP становится частью Kerberos, должна гарантироваться физическими, а не информаци-онными условиями. Другими словами, Kerberos может ра-ботать только с локальным сервером LDAP и только через локальное подключение, не допускающее перехвата ин-формационного обмена.

Для этого настроим LDAP на прослушивание локально-го сокета. В SuSE это делается путем изменения специаль-ного файла в sysconfig.

А в других дистрибутивах надо просто настроить клю-чи запуска LDAP.

Вся информация внутри LDAP размещается согласно определенным схемам. Есть такая схема и для размеще-ния информации Kerberos. Эта схема не входит в состав дистрибутивных пакетов. Но ее нетрудно разыскать в Ин-тернете. Авторство этой схемы принадлежит PADL Software Pty Ltd. Можно взять версию, прилагаемую к статье [3], или поискать поновее по ссылке [4]. Эту схему надо положить ко всем остальным схемам и добавить соответствующую ссылку на нее в файл настроек LDAP :

Разрешим полный доступ через локальный сокет, доба-вив соответствующие строки в настройки ограничений до-ступа LDAP. Здесь используется специальный подключае-мый файл slapd.access.conf , содержащий очень грубую на-стройку условий доступа. Можно даже сказать так, что эта настройка носит только учебный характер.

# rpm -qa | grep heimdal

heimdal-devel-0.6-67heimdal-lib-0.6-67heimdal-tools-0.6-67heimdal-0.6-67

# ldd /usr/lib/heimdal/sbin/kdc | grep ldap

# rpm -ivh heimdal-0.6-67.src.rpm

# cat /usr/src/packages/SPECS/heimdal.spec | ↵ sed -n "/^# building with openldap/,+14p"

# rpmbuild -ba /usr/src/packages/SPECS/heimdal.spec

# rpm -Uvh --force /usr/src/packages/RPMS/i586/heimdal-*.rpm

.....Wrote: /usr/src/packages/SRPMS/heimdal-0.6-67.src.rpmWrote: /usr/src/packages/RPMS/i586/heimdal-0.6-67.i586.rpmWrote: /usr/src/packages/RPMS/i586/heimdal-devel-0.6-67.i586.rpmWrote: /usr/src/packages/RPMS/i586/heimdal-lib-0.6-67.i586.rpmWrote: /usr/src/packages/RPMS/i586/heimdal-tools-0.6-67.i586.rpm

# ldd /usr/lib/heimdal/sbin/kdc | grep ldap

libldap.so.2 => /usr/lib/libldap.so.2 (0x4007a000)

# cat /etc/sysconÞg/openldap | grep LDAPI

OPENLDAP_START_LDAPI="yes"

# cat /etc/openldap/slapd.conf | grep krb5

include /etc/openldap/schema/krb5-kdc.schema

# building with openldap support does not work right now because# autobuild cannot handle circular dependencies such as# libhdb -> libldap -> libsasl -> libgssapi -> libhdb#with_openldap="--with-openldap=/usr"#CFLAGS="$RPM_OPT_FLAGS -DOPENSSL_DES_LIBDES_COMPATIBILITY" \./configure --enable-shared --prefix=/usr/lib/heimdal \ --with-x --mandir=%{_mandir} \ --libdir=%{_libdir} \ --infodir=%{_infodir} --libexecdir=/usr/lib/heimdal/sbin \ --includedir=/usr/include/heimdal \ --with-readline-include=/usr/include/readline \ --with-readline-lib=/usr/lib \ $with_openldapmake

28

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

Согласно указанным правилам все пользователи мо-гут читать всю базу LDAP, а вот править могут только лишь собственные контейнеры. Строка «by sockurl=”^ldapi:///$”» выбирает из всех запросов те, что поступают в LDAP через локальный сокет, и дает таким клиентским подключениям права на запись, то есть самые высокие по шкале эскала-ции прав LDAP. Как уже стало понятно, базовый контейнер LDAP имеет имя dc=office,dc=localnet.

Заметим, что хотя все атрибуты, использованные для хранения ключей принципалов, шифруются по мастер-ключу конкретного KDC (Kerberos Key Distribution Ceter или в русской аналогии ЦРК – центр распределения ключей), для предотвращения доступа к таким записям со стороны иных служб рекомендуется настроить соответствующим об-разом правила доступа к LDAP базе. Да и права, собствен-но, Kerberos тоже можно ограничить определенным уров-нем дерева LDAP.

Но разрешить все со стороны локального сокета не до-статочно. Поскольку Kerberos никак себя не аутентифици-рует при подключении к LDAP, то в сеансе связи он будет считаться анонимным пользователем. В версиях OpenLD-AP с индексом более 2 модификация базы через такое под-ключение приводит к ошибке.

Например, попытка инициализации области Kerberos завершается сообщением:

Добавим специальную опцию «allow update_anon» в управляющий файл LDAP перед директивами, описыва-ющими базу данных. Эта опция допускает изменение ба-зы LDAP анонимным клиентом, если последнее разреше-но операторами access.

Теперь можно запустить LDAP.

Видно, что процесс slapd слушает не только локальный адрес, но и сокет /var/run/slapd/ldapi. Здесь есть еще один «подводный камень», который, возможно, будет иметь зна-чение для владельцев дистрибутивов, отличных от SuSE. Дело в том, что традиционно LDAP запускается от соответ-ствующего пользователя.

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

«set user ID». Вроде все верно, только расположен он внут-ри директории, доступной лишь для ldap.ldap.

Процесс kdc в SuSE запускается от пользователя root, и поэтому нет никаких проблем с подключением к сокету для связи с LDAP. Если в некоторой системе приняты иные соглашения, то недоступность локального сокета, создан-ного LDAP, со стороны процесса kdc может быть причиной отказа Kerberos. Для исправления этого надо просто поме-нять права доступа у сокета после запуска slapd.

Подключенный через локальный сокет Kerberos име-ет исключительно доверительные права на доступ к базе LDAP. Но это нужно только для режима наполнения базы данными. Для регулярной работы Kerberos, аутентифика-ции и выдачи билетов достаточно иметь доступ на чтение. То есть всегда остается возможность «заморозить» состо-яние базы Kerberos. Хотя верно это лишь для применяемой версии Heimdal, которая не обновляет индексы в базе при выдаче билетов, и, естественно, в таком случае станет не-возможным изменение паролей принципалов.

Настраиваем KerberosСоздадим файл управления службой Kerberos. Рабочей областью Kerberos (в оригинале realm) назначим OFFICE.LOCALNET и ограничим перечень прослушиваемых адре-сов внутрисетевыми. Должно получиться так:

kadmin: kadm5_create_principal: ldap_add_s:Strong(er) authentication required

# rcldap start

Starting ldap-server doneserver:~ # netstat -apn | grep slapdtcp 0 0 127.0.0.1:389 0.0.0.0:* LISTEN 11036/slapdunix 2 [ ACC ] STREAM LISTENING 82235 11036/slapd /var/run/slapd/ldapiunix 2 [ ] DGRAM 182233 11036/slapd

# ps -eo user,args | grep slapd | grep -v grep | head �n 1

ldap /usr/lib/openldap/slapd -h ldapi:///ldap://127.0.0.1:389/ -u ldap -g ldap

# ls -als /var/run/slapd

total 24 4 drwx------ 4 ldap ldap 4096 Jun 12 13:04 . 4 drwxr-xr-x 20 root root 4096 Jun 12 23:02 .. 0 srwx------ 1 root root 0 Jun 12 13:04 ldapi 4 drwx------ 2 ldap ldap 4096 Sep 24 2003 openldap-data 4 drwx------ 2 ldap ldap 4096 Sep 24 2003 openldap-slurp 4 -rw-r--r-- 1 ldap ldap 76 Jun 12 13:04 slapd.args 4 -rw-r--r-- 1 ldap ldap 5 Jun 12 13:04 slapd.pid

# cat /etc/krb5.conf

[kdc] database = { dbname = ldap:ou=KerberosPrincipals,dc=office,dc=localnet log_file = /var/heimdal/log acl_file = /var/heimdal/kadmind.acl } addresses = 127.0.0.1 192.168.0.1[libdefaults] default_realm = OFFICE.LOCALNET clockskew = 300 dns_lookup_kdc = 1[realms] OFFICE.LOCALNET = { kdc = kerberos.office.localnet admin_server = kerberos.office.localnet kpasswd_server = kerberos.office.localnet }[domain_realm] .office.localnet = OFFICE.LOCALNET[logging] default = SYSLOG:NOTICE:DAEMON kdc = FILE:/var/log/kdc.log kadmind = FILE:/var/log/kadmind.log[appdefaults] pam = { ticket_lifetime = 1d renew_lifetime = 1d forwardable = true proxiable = false }

# cat /etc/openldap/slapd.access.conf | grep -v "^\(#\|$\)"

access to dn=".*,dc=office,dc=localnet" by sockurl="^ldapi:///$" write by self write by * read

29№7, июль 2005

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

Проверим настройки специальной программой.

Сообщения игнорируем, так как они ошибочные. Мож-но или собрать более свежую версию verify_krb5_conf, или сразу писать авторам сообщение об ошибке.

Прокомментирую секцию kdc и оператор database. Внутри указывается контейнер LDAP, в котором будут размещаться записи, используемые Kerberos. Дополнительно определим файл протокола и файл с установками ограничений доступа к самой базе со стороны принципалов. Эти строки надо ука-зывать обязательно. Но Kerberos работает со своей базой на очень примитивном уровне и поэтому не имеет возмож-ности анализировать специфические ошибки LDAP. Иначе говоря, он не может распознать отсутствие подготовленно-го контейнера в LDAP и создать его самостоятельно. Зна-чит, нужно предварительно создать контейнер для Kerberos ou=KerberosPrin-cipals,dc=office,dc=localnet. Для этого подго-товим данные в специальном файле kerberos.ldif.

Здесь отмечу одну забавную особенность. На сайте [4] в описании аналогичной настройки записан контейнер с ou= KerberosPrincpals, который отличается отсутствием буквы «i» в слове «Principals». Это именно описка, поскольку там же в примере с ldapsearch приведен грамматически пра-вильный вариант. Но тем не менее многими такая форма была воспринята как стандарт и бездумно повторена. Этот случай свидетельствует о высоком уровне априорного до-верия всякому экспертному мнению в области компьютер-ной безопасности.

Создадим контейнер для Heimdal.

Теперь все готово для настройки Kerberos.

Оффлайновое администрированиеВ первую очередь подготовим мастер-ключ.

Проверим, что появился соответствующий файл.

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

Подключимся к Kerberos в оффлайне (ключ -l) и настро-им область Kerberos.

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

Интерпретируем результат. Итак, выше приведен пере-чень служебных принципалов, созданных автоматически. Структура именования принципалов следующая: primary_name/instance@REALM. Но в данном случае часть instance имеет значение «роль». Для администрирования зарегис-трируем принципала sysadmin/admin.

Вот пароль этого принципала надо запомнить обяза-тельно. Хотя в случае утери его можно восстановить через оффлайновое подключение. Создание sysadmin/admin в файле-реплике LDAP отображается следующим образом:

# verify _ krb5 _ conf

verify_krb5_conf: /kdc/database/log_file: unknown entryverify_krb5_conf: /kdc/database/acl_file: unknown entry

# cat kerberos.ldif

dn: ou=KerberosPrincipals,dc=office,dc=localnetou: KerberosPrincipalsobjectClass: topobjectClass: organizationalUnitobjectClass: domainRelatedObjectassociatedDomain: office.localnet

# ldapadd -v -H ldap://localhost -D "cn=ldapadmin, ↵ dc=ofÞce,dc=localnet" -x -w secret -f kerberos.ldif

ldap_initialize( ldap://localhost )add ou: KerberosPrincipalsadd objectClass: top organizationalUnit domainRelatedObjectadd associatedDomain: office.localnetadding new entry "ou=KerberosPrincipals,dc=office,dc=localnet"modify complete

# kstash

Master key:Verifying - Master key:kstash: writing key to `/var/heimdal/m-key'

# ls -als /var/heimdal

4 -rw------- 1 root root 72 Jun 11 00:04 m-key

# kadmin -l

kadmin> init OFFICE.LOCALNETRealm max ticket life [unlimited]:Realm max renewable ticket life [unlimited]:kadmin> exit

# kadmin -l

kadmin> list * krbtgt/[email protected] kadmin/[email protected] kadmin/[email protected] changepw/[email protected] kadmin/[email protected] [email protected]> exit

# kadmin -l

kadmin> add sysadmin/adminMax ticket life [1 day]:Max renewable life [1 week]:Principal expiration time [never]:Password expiration time [never]:Attributes []:sysadmin/[email protected]'s Password:Verifying - sysadmin/[email protected]'s Password:kadmin> exit

time: 1118439261dn: cn=sysadmin/[email protected],ou=KerberosPrincipals,dc=office,dc=localnetchangetype: addobjectClass: topobjectClass: personobjectClass: krb5PrincipalobjectClass: krb5KDCEntrykrb5PrincipalName: sysadmin/[email protected]: 1

30

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

Здесь видно, что создатель записей в контейнерах Ker-beros anonymous.

Настраиваем DNSПерейдем к настройкам удаленного доступа к сервисам Ke-rberos. Сначала настроим DNS. Здесь предполагается, что KDC запускается в локальной сети 192.168.0.0/24 на хосте 192.168.0.1. Добавим в описание зоны office.localnet следу-ющие строки:

Перезапустим сервер DNS и проверим, что разрешение имен работает нужным образом.

Запускаем KerberosНастало время запустить службы Kerberos.

Посмотрим, что вышло.

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

рирования kadmind прослушивает все возможные адреса по порту 749, а вот kpasswdd, т.е. сервис изменения паро-лей, слушает на всех активных в данный момент адресах по порту 464, не исключая и двух внешних подключений к ISP. Другими словами, без firewall не обойтись, иначе если не атаки, то сканирований не избежать. Но все вышеска-занное относится только к принятой в SuSE схеме запус-ка. Ничего не мешает запустить kadmind и kpasswdd через суперсервер xinetd, и уже средствами последнего ограни-чить доступ. Схема запуска через суперсервер, кроме про-чего, еще и позволит сэкономить ресурсы.

Работаем в сетиТеперь проверим, как будет работать не оффлайновое, а сетевое администрирование Kerberos.

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

Это значит, sysadmin/admin может делать все, а осталь-ные только менять пароли. И теперь повторим попытку под-ключения.

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

И теперь проделаем все то же самое, но с удаленного компьютера, предварительно переложив туда файл настро-ек krb5.conf, который одновременно является и файлом на-строек клиента Kerberos.

Получим билет для принципала sysadmin/admin на ра-бочей станции:

# dig _ kerberos. _ tcp.ofÞce.localnet any +short

0 100 88 kerberos.office.localnet.

# rckdc start

Starting kdc done

# netstat -apn | grep "\(kdc\|kadmin\|kpasswd\)"

tcp 0 0 192.168.0.1:88 0.0.0.0:* LISTEN 10984/kdctcp 0 0 127.0.0.1:88 0.0.0.0:* LISTEN 10984/kdctcp 0 0 :::749 :::* LISTEN 10986/kadmindudp 0 0 XX.XXX.XX.XX:464 0.0.0.0:* 10988/kpasswddudp 0 0 192.168.0.1:464 0.0.0.0:* 10988/kpasswddudp 0 0 YYY.YY.Y.YY:464 0.0.0.0:* 10988/kpasswddudp 0 0 10.0.0.1:464 0.0.0.0:* 10988/kpasswddudp 0 0 127.0.0.1:464 0.0.0.0:* 10988/kpasswddudp 0 0 192.168.0.1:88 0.0.0.0:* 10984/kdcudp 0 0 127.0.0.1:88 0.0.0.0:* 10984/kdcudp 0 0 ::1:464 :::* 10988/kpasswddunix 2 [ ] DGRAM 359313 10988/kpasswdd

# kadmin -p sysadmin/admin

kadmin> list *sysadmin/[email protected]'s Password:kadmin: get *: Operation requires `get' privilegekadmin> exit

# cat >/var/heimdal/kadmind.acl <<EOT

> sysadmin/admin all> * cpw> EOT

# kadmin -p sysadmin/admin

kadmin> list *sysadmin/[email protected]'s Password: krbtgt/[email protected] kadmin/[email protected] kadmin/[email protected] changepw/[email protected] kadmin/[email protected] [email protected] sysadmin/[email protected]> exit

alekseybb@wsalekseybb:~> kinit sysadmin/admin

sysadmin/[email protected]'s Password:kinit: NOTICE: ticket renewable lifetime is 1 weekalekseybb@wsalekseybb:~> klistCredentials cache: FILE:/tmp/krb5cc_500 Principal: sysadmin/[email protected] Issued Expires PrincipalJun 11 02:14:33 Jun 11 12:15:57 krbtgt/[email protected]

$ORIGIN .ofÞce.localnet.$TTL 86400 ; 1 day_ kerberos TXT "OFFICE.LOCALNET."kdc A 192.168.0.1kerberos A 192.168.0.1$ORIGIN _ tcp.ofÞce.localnet.$TTL 600 ; 10 minutes_ kerberos SRV 0 100 88 kerberos.ofÞce.localnet._ kerberos-adm SRV 0 100 749 kerberos.ofÞce.localnet._ kpasswd SRV 0 100 464 kerberos.ofÞce.localnet.$ORIGIN _ udp.ofÞce.localnet.$TTL 600 ; 10 minutes_ kerberos SRV 0 100 88 kerberos.ofÞce.localnet._ kpasswd SRV 0 100 464 kerberos.ofÞce.localnet.

krb5MaxLife: 86400krb5MaxRenew: 604800krb5KDCFlags: 126krb5Key:: MCWhIzAhoAMCARChGgQYCCzqjwcCvAduYvIOzSVKuq33j9qeBJe5krb5Key:: MBWhEzARoAMCAQOhCgQIUl6ATDGML2g=krb5Key:: MBWhEzARoAMCAQKhCgQIUl6ATDGML2g=krb5Key:: MBWhEzARoAMCAQGhCgQIUl6ATDGML2g=cn: sysadmin/[email protected]: sysadmin/[email protected]: personentryUUID: 271bfa42-6e43-1029-90f0-b1a0d84cadb1creatorsName: cn=anonymouscreateTimestamp: 20050610213421ZentryCSN: 2005061021:34:21Z#0x0001#0#0000modifiersName: cn=anonymousmodifyTimestamp: 20050610213421Z

31№7, июль 2005

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

Здесь видно, что в кеше Kerberos для локального кли-ента alekseybb лежит билет от krbtgt/OFFICE.LOCALNET, выписанный на принципала – администратора sysadmin/[email protected]. Такой билет называется суперби-лет (в оригинале – Ticket Granting Ticket), поскольку он да-ет право на получение билетов на доступ ко всем другим принципалам, расположенным в той же области Kerberos. В нашем случае это список, полученный по команде «list *». Проверим доступ к базе на правах администратора.

Теперь снова заглянем в кеш билетов.

Кроме супербилета, там появился второй билет, полу-ченный на основании универсального и предназначенный для доступа к принципалу kadmin/admin@ OFFICE.LOCAL-NET. Оба билета выданы на «имя» sysadmin/admin.

Значит, работает. Удостоверимся в том, что Heimdal не модифицирует в процессе аутентификации записи в базе. Для этого есть много способов, но достаточно более вни-мательно просмотреть записи в самой базе.

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

Взвесим «за» и «против»Итак, давайте взвесим, какие преимущества достигаются комбинацией Kerberos и LDAP. Быть может, не стоило все это и городить.

Перечислим положительные приобретения:! Вся аутентификационная и бюджетная информация хра-

нится в одной базе и, значит, может быть архивирована единым образом.

! Появляется возможность «заморозки» изменений в ба-зе Kerberos, что позволяет сделать его работу более на-дежной.

! Появляется второй канал репликации базы Kerberos за счет реплики LDAP. То есть возрастает доступность (availability) службы KDC.

Теперь подсчитаем отрицательные:! У KDC появляется зависимость от дополнительной служ-

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

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

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

Ну и последнее соображение. Как следует из материа-лов работы [5], использование LDAP в качестве хранилища увеличило среднее время обработки запроса с 8 мс до 2.4 с, то есть почти в 300 раз. Конечно, измерения проводились на области, содержащей 1000 принципалов, и на не очень сильном компьютере. Но даже с поправкой на закон Мура надо учитывать фактор снижения производительности при переводе системы на подобную конфигурацию.

Ссылки:1. Заметки по настройке размещения пользовательских

бюджетов в LDAP: http://www.barabanov.ru/arts/LDAPre-marks-2.pdf.

2. Домашний сайт проекта Heimdal: http://www.pdc.kth.se/heimdal.

3. Схема для размещения информации Kerberos в LDAP: http://www.barabanov.ru/arts/kerberos_over_ldap/krb5-kdc.schema.

4. Лидер в области разработок АиА с использованием LDAP: http://www.padl.com.

5. Different database methods in Heimdal. Assar Westerlund, Swedish Institute of Computer Science: http://www.chips.chalmers.se/Chips/conference/made2000/presentations/danielsson.et.al.pdf.

alekseybb@wsalekseybb:~> /usr/sbin/kadmin

kadmin> list * krbtgt/[email protected] kadmin/[email protected] kadmin/[email protected] changepw/[email protected] kadmin/[email protected] [email protected] sysadmin/[email protected]> exit

alekseybb@wsalekseybb:~> klist

Credentials cache: FILE:/tmp/krb5cc_500 Principal: sysadmin/[email protected] Issued Expires PrincipalJun 11 02:14:33 Jun 11 12:15:57 krbtgt/[email protected] 11 02:14:47 Jun 11 03:14:47 kadmin/[email protected]

alekseybb@wsalekseybb:~> /usr/sbin/kadmin

kadmin> list -l kadmin/admin Principal: kadmin/[email protected] Principal expires: never Password expires: never Last password change: never Max ticket life: 1 hour Max renewable life: 1 hour Kvno: 1 Mkvno: 0 Policy: none Last successful login: never Last failed login: never Failed login count: 0 Last modified: 2005-06-10 20:04:12 UTC Attributes: requires-pre-authKeytypes(salttype[(salt-value)]): des-cbc-crc(pw-salt), des-cbc-md4(pw-salt), des-cbc-md5(pw-salt), des3-cbc-sha1(pw-salt)kadmin> exit

32

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

Альтернативный межгородВ прошлый раз мы предоставили нашим пользователям воз-можности дешевой междугородной связи. Для этого мы под-ключили наш сервер к сети одного из провайдеров по «род-ному» для Asterisk протоколу SIP. Однако, как показывает практика, провайдеры в большинстве своем не спешат пере-ходить на SIP и при предоставлении своих услуг продолжают использовать более традиционный H323. Сильно расстраи-ваться по этому поводу не стоит – рано или поздно все рав-но все перейдут. А пока этого не произошло, решим эту про-блему со своей стороны – установим H323-модуль Asterisk. На данный момент мне известно о существования четырех различных H323-драйверов (см. таблицу 1)для Asterisk:! chan_oh323 – исторически первый H323-драйвер для

Asterisk. При работе использует RTP-стек библиотеки OpenH323, со всеми вытекающими отсюда последствиями (поддерживаемые кодеки, стабильность, совместимость). Поддерживается компанией inAccess Networks [2].

! chan_h323 – отличительной особенностью данного драй-вера является более тесная интеграция с Asterisk (ис-пользуется Asterisk-реализация протокола RTP), что поз-воляет достичь большей производительности по сравне-нию с chan_oh323. Платой же за это является несколько меньшая функциональность. Так, например, chan_h323 не имеет собственного буфера дрожания (jitter buffer) [3], а также не поддерживает некоторые кодеки.

! chan_ooh323c – драйвер компании Objective Systems Inc [4], основанный на их открытом H323 стеке – Objec-tive Open H.323 for C. И хотя количество поддерживае-мых кодеков и H323-настроек несколько меньше, чем у конкурентов, драйвер вполне можно использовать. На данный момент статус драйвера – «beta», но со слов разработчиков, модуль в скором времени должен вой-дет в состав официальной версии Asterisk.

! chan_woomera – драйвер, позволяющий связать Asterisk с сервером Woomera. На данный момент через woomera можно совершать только H323-звонки, хотя в будущем разработчики обещают обеспечить поддержку универ-сального уровня абстракции OPAL.

Что же выбрать? Ответ на этот вопрос нужно искать ис-ходя из конкретных задач.

Если вы используете STABLE-версию Asterisk, то вариан-ты ограничиваются первыми двумя представителями. При этом, если планируемое количество одновременных звон-ков, совершаемых через H323, достаточно велико, то бо-лее предпочтительным будет chan_h323, если желательна более «качественная» реализация H323, то лучше исполь-зовать chan_oh323.

Драйверы chan_ooh323 и chan_woomera можно реко-мендовать к использованию разработчикам и «очень про-двинутым пользователям», желающим заглянуть в за-втрашний день (H323 и SIP поверх IPv6 и т. д.). Для наших же задач возможностей chan_h323 или chan_oh323 будет более чем достаточно. Определенности ради будем счи-тать, что мы выбрали chan_oh323, хотя приведенные ни-же настройки с небольшими изменениями будут работать и с chan_h323.

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

При этом будем использовать машину следующей кон-фигурации:! CPU AthlonXP 1500+! MB Epox 8KHA+ (VIA KT266A)! 512 Мб RAM! HDD 40 Гб IDE Samsung! Gentoo Linux Linux 2005.0 (ядро 2.6.12, gcc 3.4.3 и

glibc 2.3.4)

Нам понадобятся следующие версии программ и биб-лиотек:! pwlib 1.6.6! openh323 1.13.5! chan_oh323 0.6.6! Asterisk 1.0.9

ASTERISK И LINUX: МИССИЯ IP-ТЕЛЕФОНИЯASTERISK И LINUX: МИССИЯ IP-ТЕЛЕФОНИЯДЕЙСТВИЕДЕЙСТВИЕ 2 2

В прошлой статье [1] мы познакомились с основными возможностями Asterisk PBX,

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

расширим ее функциональность, добавив поддержку протокола H323 и обеспечив связь

с городской сетью.

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

33№7, июль 2005

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

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

Взять нужные версии лучше всего с сайта inAccessNet-works (к сожалению, у меня не получилось собрать openh323 с сайта inAccessNetworks, поэтому я взял эту же версию библи-отеки из репозитория исходных кодов Gentoo) [5, 6, 7]. Итак, загружаем чуть меньше 4 Мб исходных кодов в /root/src/oh323 и переходим к установке. Начинать необходимо с pwlib.

Оптимизированная версия pwlib установлена, перехо-дим к openh323.

Библиотека OpenH323 собирается достаточно долго (в моем случае на это ушло чуть больше часа). Кроме того, во время компиляции вам понадобятся около 150 Мб дис-кового пространства и 300 Мб swap.

Теперь перейдем к канальному драйверу chan_oh323:

Драйвер установлен. Запустим Asterisk с режимом кон-соли (asterisk -cvvvvv) и выполним команду:

Модуль chan_oh323 должен присутствовать в списке за-груженных модулей (см. рис. 1).

Настраиваем chan_oh323Прежде чем приступить к использованию chan_h323 в As-terisk, нам необходимо предварительно произвести на-

стройку, а также внести соответствующие изменения в но-мерной план.

Параметры chan_oh323 хранятся в файле /etc/aster-isk/oh323.conf. Итак, в контексте [general] определим сле-дующие параметры (для остальных оставим значения по умолчанию):

Здесь мы указали:! IP-адрес, который chan_oh323 будет использовать для

работы с H323-устройствами (очень полезно, если у Linux-машины имеется несколько адресов в различных сетях);

! IP-адрес GateKeeper, пароль, с которым мы будем ре-гистрироваться;

! контекст Asterisk, в который будут попадать все звонки, приходящие со стороны H323;

! включили режим faststart для более быстрой установки H323-соединений;

! сообщили серверу, что тоновые сигналы (DTMF) необходи-мо передавать внутри RTP-пакетов (inBandDTMF=yes).

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

Таблица 1. Сравнение H323-драйверов для Asterisk

# cd /root/src/oh323# tar xfz ./pwlib-Janus _ patch4-src-tar.gz# cd pwlib# ./conÞgure# make opt# make install

# cd ..# tar xfz ./openh323-v1 _ 13 _ 5-src.tar.gz# cd openh323# ./conÞgure # make opt# make install

# cd ..# tar xfz ./asterisk-oh323-0.6.6.tar.gz# cd ./asterisk-oh323-0.6.6# make # make install

* CLI> show modules

[general]listenAddress=IP _ адрес _ интерфейсаfastStart=yesinBandDTMF=yesgatekeeper=IP _ адрес _ GateKeepergatekeeperPassword=secretcontext=generic-inc

Рисунок 1. Список загруженных модулей Asterisk

34

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

Если провайдер предоставляет нам телефонные номера для входящих звонков, запишем их в секцию [register]:

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

Для кодеков определим следующие параметры:

Данные настройки определяют количество голосовых кадров, упаковываемых в один IP-пакет. Значение по умол-чанию («1») слишком расточительно, поэтому поставим здесь типичные значения для голосового оборудования H323 – «4,6». Заданные параметры будут применены по-сле следующего перезапуска Asterisk (см. «Перезагрузка конфигурации»). Перейдем к изменениям номерного пла-на. Для входящих звонков (со стороны H323) подойдет кон-текст, который мы создавали в прошлый раз (ведь по боль-шому счету нам все равно посредством какой технологии до нас дозвонились):

А вот для исходящих звонков потребуются некоторые из-менения. Добавим в контекст [office] следующую запись:

При наборе номера с префиксом «6» звонок будет осу-ществляться с помощью chan_oh323, т.е. согласно номерно-му плану провайдера определенному на его GateKeeper.

Если же провайдер не использует Getekeeper (схема терминации на шлюз), то в файле oh323.conf необходи-мо указать:

А в номерном плане написать так:

Здесь prefix – служебный номерной префикс провайдера IP-телефонии, а gw_addr – IP-адрес его H323-шлюза.

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

Как вы помните из [3], существуют два основных спо-соба подключения к городской телефонной сети: аналого-вый (через стандартный телефонный провод) и цифровой (например, 30 каналов через интерфейс E1). Также нам из-вестно, что «переводом» звонков из телефонной сети в VoIP занимаются шлюзы. Так вот, с Asterisk можно не только ис-пользовать обычные шлюзы H323, SIP с портами FXO, FXS, E1, но и специализированные модули выпускаемые специ-ально для Asterisk. Фактически они представляют собой PCI-платы с соответствующими разъемами, необходимой электроникой «на борту», а также драйверами, позволяю-щими всему этому добру работать с Asterisk.

В город вместе с DigiumНаиболее известным (но не единственным [8]) производи-телем таких плат является компания Digium [9] – основной спонсор Open Source-проекта Asterisk. Спектр выпускаемых ею плат достаточно велик – от однопортовых FXS и FXO адаптеров, до модулей с четырьмя интерфейсами E1/T1. Платы с аналоговыми портами наиболее привлекательны для малых предприятий (2 платы 4FXO = 8 аналоговых ли-ний (рис. 2)), цифровые модули наиболее интересны сред-ним предприятиям (1 плата 4E1 – 120 цифровых каналов!).

С точки зрения стоимости особенно привлекательны-ми являются платы Digium Wildcard X100P/X101P. С ними связана одна интересная история. Первоначально Wild-card X100P/X101P продавалась Digium по цене около 100$. Однако через какое-то время пользователи заметили, что на самом деле эти платы есть ни что иное, как обычные PCI-софт-модемы на широко распространенных чипсетах (Intel 537PU, 537PG, Ambient MD3200, Motorola 62802-51, первые 3 определятся как X101P или generic clone, пос-ледний как X100P), продаваемые в обычном компьютер-ном магазине за 10-15$. После того как эта информация стала общеизвестной, Digium ничего не оставалось, кро-ме как свернуть продажи линейки X100P/X101P (в пос-ледствии ее место занял внешний модуль IAXy). Впрочем, это не означает, что остальные поступили также. Наобо-рот, во многих online-магазинах эту плату (X100P, X101P

[generic-inc]exten => s,1,Wait, 1exten => s, 2, Answerexten => s,3, BackGround(local-welcomе)exten => s,4, WaitExtenexten => 200,1, Macro(stdexten,200,SIP/200)exten => 201,1, Macro(stdexten,201,SIP/201)exten => 202,1, Macro(stdexten,202,SIP/202)exten=> 8500,1, VoiceMailMainexten=> 8500,n, Hangup

exten => _ 6 Dial(OH323/{EXTEN:1},20,rT)

gatekeeper=DISABLE

exten => _ 6 Dial(OH323/preÞx{EXTEN:1}@gw _ addr,20,rT)

[register]context=generic _ incalias=телефонный _ номер _ 1 _ от _ провайдераalias=телефонный _ номер _ 2 _ от _ провайдера

[codecs]codec=G729frames=6codec=G711Uframes=20codec=G729Aframes=6codec=G729Bframes=6codec=G729ABframes=6codec=GSM0610frames=4codec=G7231frames=4

Рисунок 2. Модуль Digum TDM22B (2 FXO + 2 FXS)

35№7, июль 2005

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

или их клоны) по-прежнему можно купить по цене 10-15$. К сожалению, в России софт-модемы на нужных чипсетах не продаются в широкой рознице (у нас более популяр-ны модемы на микросхемах Conexant и Lucent, а не Intel и Motorola), поэтому я заказал эту плату (X101P) через Ин-тернет [10, 11]. Итак, вставим модем в компьютер и на-строим его с Asterisk.

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

Если среди вывода этой утилиты присутствует строч-ка, похожая на эту:

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

Если модули загрузились без ошибок, то в /var/log/mes-sages мы увидим следующее:

Данная строчка является лучшей иллюстрацией того, что с «железом» у нас все в порядке.

Однако прежде чем перейти к настройке Asterisk оста-новимся на еще одном важном моменте. Дело в том, что платы Digium реализуют «телефонный» интерфейс (FXO, FXS, E1, T1) программно (в zaptel-драйвере), используя для этого вычислительные ресурсы компьютера (в то время как производители других систем телефонии используют спе-циализированные (и более дорогие) сигнальные процессо-ры – DSP). При этом ввиду специфики задачи (быстрая об-работка сигналов) работа с платой ведется в режиме пре-рываний. Поэтому для нормальной работы очень важно на-строить систему так, чтобы платы Digium ни с кем не дели-ли одно прерывание, в противном случае возможны ухуд-шения качества звука. Посмотрим, как с этим обстоит си-туация у нас:

Все нормально, плата монопольно использует прерыва-ние 10. Перейдем к настройке Asterisk. Первым делом от-редактируем файл /etc/zatel.conf:

Первая строчка означает, что для платы 1 необходи-мо использовать сигнализацию FXS loop-start (в Asterisk для плат FXO используется сигнализация FXS, и, наобо-рот; если при указанных настройках сервер не будет опре-делять сигнал «занято», попробуйте другие разновиднос-ти fxs-сигнализации: fxs_ks, fxs_gs). Если плат в системе несколько (например, две), то в первой строчке нужно на-писать fxsks=1-2.

Строки 2 и 3 определяют параметры телефонной сети для используемого оборудования (частоты тоновых сигна-лов, их длительность и т. д.). К сожалению, в списке доступ-ных стран России нет, поэтому, для того чтобы в вашем кон-кретном случае все заработало, возможно, придется пере-брать несколько стран. Список всех доступных вариантов проще всего посмотреть в исходном тексте – файл zoneda-ta.c библиотеки zaptel.

Следующим шагом при настройке нашего сервера яв-ляется определение параметров карты в файле /etc/aster-isk/zapata.conf. Выбор значения того или иного парамет-ра определяется конкретной АТС, к которой мы подклю-чаем Asterisk. Как известно, в России могут встречаться различные типы АТС. Привести универсальную конфигу-рацию, подходящую для всех случаев жизни, достаточно сложно, поэтому ограничимся описанием двух наиболее типичных – с импульсным набором (для старых АТС), с то-новым набором (для более-менее новых АТС). Итак, вна-чале определим общие параметры, подходящие практи-чески для всех АТС:

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

Итак, мы задали контекст, в который будут попадать все телефонные звонки, приходящие со стороны ТФОП. Опре-делили тип сигнализации, используемой Asterisk при рабо-те с FXO-портом.

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

Теперь перейдем к параметрам, определяемым в зави-симости от возможностей конкретной АТС:

# lspci

0000:00:09.0 Network controller: Tiger Jet Network Inc. Intel 537

# modprobe zaptel# modprobe wcfxo

Found a Wildcard FXO: Generic Clone

# cat /proc/interrupts

0: 384085652 XT-PIC timer 1: 287894 XT-PIC i8042 2: 0 XT-PIC cascade 8: 2 XT-PIC rtc 9: 0 XT-PIC acpi 10: 181360 XT-PIC wcfxo 11: 48942244 XT-PIC hci_hcd, uhci_hcd, uhci_hcd, eth0 12: 2690249 XT-PIC i8042 14: 810676 XT-PIC ide0 15: 699164 XT-PIC ide1NMI: 0 LOC: 0 ERR: 0

fxsls=1loadzone=usdefaultzone=us

[channels]context=[generic-inc]signalling=fxs _ lsgroup=1callgroup=1pickupgroup=1busydetect=yes busycount=5 channel=1

callerid=asreceivedcallprogres=yes usecallerid=yesusecallingpres=yes callwaitingcallerid=yes threewaycalling=yestransfer=yescanpark=yescancallforward=yes

36

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

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

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

В независимости от АТС нам, скорее всего, понадобит-ся включить подавление «эха» для zaptel-каналов. Для это-го добавим следующие две строчки:

Если же с помощью этих настроек полностью избавить-

ся от эха не удается, можно дополнительно задействовать следующие:

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

Перейдем к настройке номерного плана. В качестве префикса для выхода в город будем использовать цифру «5». В уже знакомый нам контекст [office] добавим следу-ющую строку:

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

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

Таким образом, при наборе номера 101 Asterisk перей-дет в контекст pstn-dialout, зачитает приветствие pstn-ann-ounce (которое необходимо предварительно записать), по-сле чего совершит звонок в город по введенному нами но-меру. Подобную схему можно с успехом использовать и для других технологий (H323, SIP).

Выход через SIP-шлюзК сожалению, далеко не всегда имеется возможность ис-пользования оборудования Digium. Например, в ввиду фи-зических ограничений иногда бывает несколько затрудни-тельно установить PCI-платы в стандартные стоечные сер-веры (1U, 2U). Кроме того, рынок оборудования IP-телефо-нии в России все еще находится в состоянии, близком к за-чаточному, и найти в продаже платы Digium по разумным ценам может быть несколько проблематичным.

Для решения этих проблем рассмотрим альтернативный вариант сопряжения Asterisk с городской сетью – c помощью «внешних» голосовых шлюзов. Теоретически совместно с Asterisk можно использовать любые из шлюзов, поддержи-вающих протоколы SIP/H323/SCCP, однако, по моему мне-нию, на практике совместно с Asterisk лучше использовать шлюзы c протоколом SIP. Наиболее известными производи-телями таких устройств (совместимых с Asterisk) являются – Cisco, Mediatrix, Quintum, AddPac, VegaStream и D-Link.

В качестве примера рассмотрим сопряжение Asterisk с городской сетью с использованием шлюза AddPac AP200D. Данный шлюз представляет собой отдельное устройство, имеющее 2 порта FXO (рис. 3).

Устройство поддерживает все наиболее популярные способы конфигурации (console, telnet, web, EMS), а его командный интерфейс очень сильно похож на интерфейс устройств Cisco (таким образом, с некоторыми поправками приведенное ниже применимо и к голосовому оборудова-нию Cisco). Для базовой конфигурации устройства необхо-димо определить сетевые и голосовые параметры. И если с первыми все достаточно просто (нужно всего лишь опре-делить стандартные настройки – IP-адрес, маску подсети и маршрут по умолчанию), то со вторыми могут возникнуть затруднения. Остановимся на них более подробно.

При описании голосовых параметров ключевым являет-ся понятие dial-peer – точка, участвующая в голосовом со-единении. Существует два типа dial-peer (см. рис. 4):! POTSdial-peer – описывает параметры соединения с

традиционной телефонной сетью. POTS dial-peer «при-вязываются» к аппаратным портам (FXO, FXS) шлюза.

! VOIPdial-peer – описывает параметры соединения с VoIP-сетью. Для простоты понимания VOIP dial-peer можно ассоциировать с Ethernet-разъемом шлюза.

pulsedial=yes

echocancel=yes echocancelwhenbridging=yes

echotraining=yes txgain=0.0rxgain=0.0

exten=> _ 5.,1,Dial(ZAP/g1/EXTEN:1,20,rT)

[pstn-dialout]exten => s,1,Wait, 1exten => s,2, Answerexten => s,3, BackGround(pstn-announce)

exten => s,4, Read(ext)exten => s,5, Dial(ZAP/g1/${ext:1},20,rT)

[ofÞce]exten => 101,1,Goto(pstn-dialout,s,1)

Рисунок 3. Шлюз IP-телефонии AddPac AP200D (2FXO)

37№7, июль 2005

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

Для минимальной настройки нам понадобится сконфи-гурировать два dial-peer (по одному каждого типа), а также определить правила маршрутизации между ними внутри нашего шлюза. POTS dial-peer «привяжем» к FXO-линии, а VOIP dial-peer «настроим» на Asterisk. Звонок из ТФОП на наш сервер будут делаться с помощью донабора внутрен-него номера. При наборе городских номеров из Asterisk бу-дем добавлять префикс «9» перед исходным номером.

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

Создадим POTS-dial-peer с номером 0 (для второго пор-та нужно произвести аналогичные действия):

Определим для него следующие параметры:

Только что мы сказали, что все звонки, приходящие на шлюз и начинающиеся с номера «9», должны уходить на первый порт FXO, ассоциированный с dial-peer 0. При звон-ках из ТФОП на указанный FXO-порт шлюз будет аутен-тифицироваться на Asterisk с использованием указанных имени пользователя и пароля. Правда, для этого устрой-ству предварительно необходимо указать, где именно на-ходится Asterisk, которому будут передаваться звонки из ТФОП. Опишем VOIP dial-peer:

Определим следующие параметры:

AP200# conf

Enter configuration commands, one per line. End with CNTL/ZAP200(config)#

AP200(conÞg)# dial-peer voice 0 pots

AP200(config-dialpeer-pots-0)#

dial-peer voice 0 pots destination-pattern 9T port 0/0 user-name 100 user-password potsfxopwd1

AP200(conÞg)# dial-peer voice 1000 voip

AP200(config-dialpeer-voip-1000)#

dial-peer voice 1000 voip

Полезные советы

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

Позвонив на номер 150, мы сможем наговорить необхо-димый текст, который будет сохранен в стандартной папке звуков Asterisk (/var/lib/asterisk/sound) в файле ivrrecording.gsm. Прослушать содержимое этого файла можно, позво-нив по номеру 151.

Помимо записи с помощью Asterisk можно использо-вать специальные утилиты конвертации форматов, напри-мер sox [12]:

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

избежать. Для этого в консоли asterisk достаточно выпол-нить следующую команду:

Ежедневная перезагрузкаНекоторые пользователи [13] отмечали проблемы с утечка-ми памяти при очень интенсивном использовании Asterisk. Эта проблема в той или иной степени присуща всем про-дуктам и вызвана ошибками в исходном коде. Безусловно, самым правильным способом ее решения является исправ-ление исходного кода. Однако в качестве временной меры (до тех пор пока ошибки в коде не будут исправлены разра-ботчиками) можно предложить регулярно (для профилак-тики) перезапускать сервер с Asterisk в свободное время, например, ночью. Для этого можно добавить в файл /etc/crontab строку следующего содержания:

Восстановление после сбоевНе исключено, что во время работы процесс Asterisk «совер-шит недопустимую операцию и будет закрыт». (И хотя такая ситуация для STABLE-версии является из ряда вон выходя-щей, не учитывать ее появление для «боевой» системы все же нельзя.) Как это отразится на пользователях?

Думаю, что не нужно быть пророком, чтобы понимать, что в этом случае связи не будет. Возможным решением этой проблемы может быть сокращение общего времени простоя сервиса путем его быстрого перезапуска. Для As-terisk эта возможность является практически стандартной – достаточно просто для запуска использовать файл asterisk_safe (вместо asterisk). Теперь при «авариях» сервис будет перезапускаться автоматически. В принципе аналогично-го результата можно добиться и с помощью простого shell-скрипта, выполняемого по cron.

# sox inputÞle.wav -r 8000 -c 1 outputÞle.gsm resample -ql

[gsm-record]exten => 150,1,Wait(2)exten => 150,2,Record(testrecord:gsm)exten => 150,3,Wait(2)exten => 150,4,Hangupexten => 151,1,Playback(testrecord2)exten => 151,2,Wait(2)exten => 151,3,Hangup

*CLI > reload

0 0 * * * root /etc/init/asterisk restart> /dev/nu

38

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

Звонки из ТФОП будем направлять в наш стандартный контекст для входящих звонков – generic_inc.

Для исходящих звонков добавим в контекст [office] сле-дующую строчку:

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

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

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

До встречи!

Литература и ссылки:1. Платов М.В. Asterisk и Linux: миссия IP-телефония. – Жур-

нал «Системный администратор», №6, 2005 г. – 12-19 c.2. http://www.inaccessnetworks.com/projects/asterisk-

oh323.3. Платов М. Что важно знать об IP-телефонии. – Журнал

«Системный администратор», №5, 2005 г. – 20-25 c.4. http://obj-sys.com/open/index.shtml.5. http://www.inaccessnetworks.com/ian/projects/asterisk-

oh323/Libraries/pwlib-Janus_patch4-src-tar.gz.6. ftp://ftp.gtlib.cc.gatech.edu/pub/gentoo/distfiles/openh323-

v1_13_5-src.tar.gz.7. http://www.inaccessnetworks.com/projects/asterisk-oh323/

download/asterisk-oh323-0.6.6.tar.gz.8. http://www.voipsupply.com/index.php?cPath=99.9. http:/www.digium.com.

10. http://www.goods2world.com.11. http://www.iaxtalk.com.13. http://sox.sourceforge.net.14. http://www.voip-info.org/tiki-index.php?page=Asterisk+adm

inistration.

Перейдем в контекст определения настроек sip user-agent:

Зададим следующие параметры:

Этим мы сказали шлюзу, что SIP-сервер находится по адресу 192.168.0.20. и при регистрации на нем необходимо использовать e164-номер (международный стандарт, опре-деляющий правила нумерации абонентов в телефонных се-тях) и пароль, указанными для POTS dial-peer. Теперь разбе-ремся со «служебным» префиксом «9». Очевидно, что пере-давать его в ТФОП нельзя, поэтому его необходимо отбра-сывать. Делать это можно как на Asterisk (см. выше приме-ры для межгорода и плат Digium), так и непосредственно на шлюзе. Воспользуемся вторым способом. Для этого созда-дим translation-rule и применим его к POTS dial-peer:

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

Итак, с настройками шлюза мы закончили. Применим конфигурацию и перейдем к настройке Asterisk:

Для того чтобы использовать шлюз из Asterisk, нам по-надобится создать для него учетную запись SIP, а также внести необходимые изменения в номерной план. Добавим в файл /etc/asterisk/sip.conf следующие строки:

Proxyserver Registration Information proxyserver registration option = e164 Proxyserver list : --------------------------------------------------------------- Server address Port Priority Status --------------------------------------------------------------- 192.168.0.20 5060 128 Registered(E.164) Proxyserver registration status : ------------------------------------------------ UserName Regist Status ------------------------------------------------ 100 yes Registered

destination-pattern T session target sip-server session protocol sip dtmf-relay rtp-2833 no vad

Рисунок 4. POTS и VOIP dial-peer

AP200(conÞg)# sip-ua

AP200(config-sip-ua)#

sip-ua user-register sip-server 192.168.0.20 register e164

AP200(conÞg)# translation-rule 0AP200(conÞg-translation-rule#0)# rule 0 9T TAP200(conÞg-translation-rule#0)# exitAP200(conÞg)# dial-peer voice 0AP200(conÞg-dialpeer-pots-0)# translate-outgoing ↵ called-number 0

AP200(conÞg)# write

Do you want to WRITE configuration ? [y|n] yWriting configuration....doneAP200(config)# rebootSystem Reboot...

[100] ;AP200type=friendhost=dynamicusername=100

secret= potsfxopwd1dtmfmode=rfc2833context=generic-inc

exten => _ 9,Dial(SIP/EXTEN@100,20,rT)

AP200# show sip

39№7, июль 2005

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

Протокол TFTP (Trivial File Transfer Protocol – триви-альный протокол передачи файлов) благодаря сво-ей предельной простоте довольно часто использу-

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

Протокол TFTP (a.k.a. RFC1350)Сначала коротко рассмотрим сам протокол, как он опреде-лен в документе RFC1350. Поскольку главное требование к протоколу – простота, то в нем поддерживается лишь не-обходимый минимум функций: возможность чтения файла с удаленного хоста и записи файла на хост. Протоколом не предусматривается ни аутентификация/авторизация поль-зователя, ни навигация по каталогам, ни даже просмотр со-держимого каталога.

Нет в TFTP и отдельной процедуры соединения, как это происходит в случае с FTP – соединение устанавливается

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

В качестве стандартного порта для протокола TFTP определен порт 69. Основным транспортным протоколом для TFTP является UDP, однако работа поверх TCP также возможна. Чтобы прочитать файл, на этот порт посылается запрос на чтение, содержащий код операции (opcode, рав-ный 1 (RRQ)), имя запрашиваемого файла и режим переда-чи, который может быть «netascii» или «octet». Стандартом также определен режим «mail», предназначенный для пере-дачи сообщений электронной почты, но он считается уста-ревшим и не рекомендуется к применению. Эти значения соответствуют тому, что обычно именуется «текстовым» и «двоичным» режимами: в режиме netascii предусматривает-ся обработка управляющих символов (например, перевода строки) в соответствии со стандартами, принятыми на той или иной платформе; в режиме octet данные должны быть переданы в «сыром» виде, без какой-либо обработки.

В ответ на запрос, если нужный файл существует и до-ступен для чтения, сервер отсылает первую порцию дан-ных, содержащую opcode 3 «DATA», номер блока (1) и соб-ственно данные. Данные передаются блоками по 512 байт,

FFreereeBSD TIPS: РАБОТАЕМ С TFTPBSD TIPS: РАБОТАЕМ С TFTP

Для некоторых задач обмена Для некоторых задач обмена

файлами по сети многие файлами по сети многие

возможности протокола FTP возможности протокола FTP

оказываются избыточными. оказываются избыточными.

Чтобы не тратить ресурсыЧтобы не тратить ресурсы

на их поддержку, был на их поддержку, был

разработан протокол TFTP.разработан протокол TFTP.

СЕРГЕЙ СУПРУНОВСЕРГЕЙ СУПРУНОВ

40

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

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

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

Запись файла выполняется аналогично, с той разницей, что в ответ на запрос о записи (opcode 2, WRQ) сервер от-сылает подтверждение с номером блока 0.

Для оповещения удаленной стороны о возникновении ошибки используются специальные пакеты с opcode = 5 (ERROR).

Как видите, протокол отводит два байта для указания номера отсылаемого блока, что накладывает ограниче-ние на размер передаваемого файла в 32 Мб. Существу-ют документы RFC 1782 – 1785, расширяющие возможно-сти TFTP. В частности, RFC1783 определяет дополнитель-ный параметр blksize, позволяющий задать размер блока, отличный от 512 байт. Помимо увеличения максимального размера файла данная возможность также способствует увеличению скорости передачи в средах с большим зна-чением MTU.

Клиент tftpСистема FreeBSD включает в себя как TFTP-сервер (tftpd), так и утилиту tftp, выполняющую функции клиента. Про-грамма tftp представляет собой интерактивную оболочку для работы с TFTP-серверами (в отличие от одноименной утилиты в Windows, которая требует в качестве параметра сразу указывать и выполняемую операцию). По команде «?» можно получить список и краткое описание всех доступных команд (в приведенном листинге вместо оригинальных опи-саний команд стоят мои комментарии):

Установка соединения и обмен данными обеспечивает-ся командами put и get, все остальные служат для настрой-ки поведения клиента:

На приведенном выше листинге показана попытка счи-тать файл при неработающем сервере. Как видите, клиент не обнаруживает наличие проблемы и через каждые 5 се-кунд (параметр Rexmt-interval) повторяет попытки устано-вить соединение, передавая запрос RRQ и ожидая пер-вый блок данных. Спустя 25 секунд (Max-timeout) эти по-пытки прекращаются. Обратите внимание, что приглаше-ние вы получите в любом случае, независимо от того, за-пущен ли на указанном узле TFTP-сервер или нет. Как бы-ло описано выше, попытка установить соединение выпол-няется только при отправке запроса на чтение или запись. До этого момента клиент ничего не знает о наличии серве-ра на удаленной машине.

Пример успешной записи файла на сервер выглядит так (включена трассировка):

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

serg$ tftptftp> ?Команды могут сокращаться, пока сохраняется уникальность.

connect указать сервер, с которым будет устанавливаться соединениеmode установить режим передачи (ascii|netascii|binary|image|octet)put отправить файл на серверget получить файл с сервераquit выйти из tftpverbose вкл./откл. подробные сообщенияtrace вкл./откл. трассировку пакетов в ходе обмена с серверомstatus показать текущие настройкиbinary включить режим обмена octetascii включить режим обмена netasciirexmt установить таймаут, используемый для каждого пакетаtimeout установить общий таймаут сеанса? вывести на экран эту справку

tftp> verboseVerbose mode on.tftp> tracePacket tracing on.tftp> put messagesputting messages to test.ru:messages [netascii]sent WRQ <file=messages, mode=netascii>received ACK <block=0>sent DATA <block=1, 512 bytes>received ACK <block=1>sent DATA <block=2, 512 bytes>received ACK <block=2>sent DATA <block=3, 512 bytes>received ACK <block=3>sent DATA <block=4, 512 bytes>received ACK <block=4>sent DATA <block=5, 512 bytes>received ACK <block=5>sent DATA <block=6, 512 bytes>received ACK <block=6>sent DATA <block=7, 512 bytes>received ACK <block=7>sent DATA <block=8, 512 bytes>received ACK <block=8>sent DATA <block=9, 120 bytes>received ACK <block=9>Sent 4216 bytes in 0.1 seconds [337280 bits/sec]

tftp> tracePacket tracing on.tftp> verbose

Verbose mode on.tftp> conn localhosttftp> statusConnected to localhost.Mode: netascii Verbose: on Tracing: onRexmt-interval: 5 seconds, Max-timeout: 25 secondstftp> get configgetting from localhost:config to config [netascii]sent RRQ <file=config, mode=netascii>sent RRQ <file=config, mode=netascii>sent RRQ <file=config, mode=netascii>sent RRQ <file=config, mode=netascii>sent RRQ <file=config, mode=netascii>Transfer timed out.

.. .. .. ..sent DATA <block=65534, 512 bytes>received ACK <block=65534>sent DATA <block=65535, 512 bytes>received ACK <block=65535>sent WRQ <file=messages, mode=netascii>sent WRQ <file=messages, mode=netascii>received ACK <block=65535>sent WRQ <file=messages, mode=netascii>received ACK <block=65535>

41№7, июль 2005

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

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

Сервер tftpdНесмотря на букву «d» в конце имени, tftpd не является де-моном, его запуск выполняется супердемоном inetd при по-явлении запроса на порту 69. По умолчанию соответству-ющая строка в /etc/inetd.conf закомментирована, и для ак-тивизации сервера комментарий нужно удалить и переза-пустить процесс inetd.

Все настройки поведения сервера выполняются с по-мощью ключей командной строки путем редактирования файла /etc/inetd.conf. Наиболее часто используются сле-дующие опции:! -s <каталог>: после запуска tftpd установит указанный

каталог как корневой, используя функцию chroot. Если не указан пользователь (см. опцию –u), то процесс по-лучает права nobody.

! -c: позволяет привязывать корневой каталог сервера к IP-адресу удаленного хоста. Используется совместно с опцией –s, указывающей базовый каталог. Например, если базовый каталог определен как /var/tftp, то при по-лучении запроса с адреса 1.2.3.4 корневым каталогом будет являться /var/tftp/1.2.3.4. Если данный каталог от-сутствует, соединение разрывается.

! -C: аналогична ключу -c, но при отсутствии каталога, соответствующего адресу клиента, корневым катало-гом становится базовый.

! -l: включает режим протоколирования работы, исполь-зуя syslog (сообщения сохраняются как LOG_FTP).

! -u <пользователь>: указывается имя непривилегирован-ного пользователя, с правами которого будет работать сер-вер после переключения в chroot. Пользователь должен быть задан по имени, использование UID недопустимо.

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

Особое внимание следует уделить вопросу безопасно-сти. Поскольку сам сервер tftpd не выполняет никаких про-верок авторизации, то доступ к нему необходимо ограни-чивать. Наиболее часто для этого используют брандмауэ-ры, пропуская пакеты на 69-й порт только с разрешенных узлов. Также может быть удобен файл /etc/hosts.allow, ко-

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

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

Также рекомендуется с файлов, которые предназначе-ны только для считывания, снимать права на запись. Если файл требуется записывать на сервер, но он не предназна-чен для чтения другими пользователями, можно поставить на него права 222 (-w--w--w-). При включенной опции –w это можно автоматизировать с помощью ключа «-U mask», кото-рый определяет маску для создаваемых (самим процессом tftpd по запросу на запись) файлов. Для описанного выше примера следует указать «-U 555» – в этом случае каждый созданный по запросу клиента файл получит разрешение только на запись и не сможет быть никем прочитан (кроме администратора сервера, разумеется).

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

Итак, предполагая, что обмен с CISCO выполняется по изолированной сети 10.100.100.0/24, а интересующие нас устройства имеют адреса 10.100.100.1 и 10.100.100.2, запуск tftpd удобно выполнять со следующими ключами:

Создаем каталог /var/tftp/cisco, и в нем две директо-рии 10.100.100.1 и 10.100.100.2, владельцем которых дела-ем пользователя tftp (создать его придется вручную). Раз-решаем прохождение соединений на порт 69 с указанных адресов через все запущенные в системе пакетные филь-тры. Теперь после перезапуска inetd (или перезагрузки сер-вера) tftpd готов к работе.

На CISCO копирование на сервер выполняется коман-дой copy:

Аналогично можно загружать конфигурацию с сервера на CISCO, поменяв местами аргументы команды copy.

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

tftpd -clw -s /var/tftp/cisco -u tftp

Host>enaPassword:Host #copy running-config tftp:Address or name of remote host []? 10.100.100.254Destination filename [host-confg]? config!!!!!!20693 bytes copied in 1.044 secs (19821 bytes/sec)

sent WRQ <file=messages, mode=netascii>received ACK <block=65535>sent WRQ <file=messages, mode=netascii>received ACK <block=65535>Transfer timed out.

42

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

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

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

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

УСТАНАВЛИВАЕМ СВЯЗКУ POSTFIX + EXCHANGE

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

документооборот на базе MS Exchange, оставив пользователям возможность общаться

по электронной почте с внешним миром. И при этом не уменьшить уровень внутренней

безопасности. Предлагаем вам быстрое и эффективное решение данной задачи.

ВЛАДИМИР АГАПОВ

43№7, июль 2005

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

! В связи с тем, что название Windows-домена в AD часто не совпадает с почтовым доменом, необходимо вклю-чить маскарадинг.

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

Приступим к настройке ExchangeЗапускаем Exchange System Manager:! Разворачиваем «Administrative Group → company → Serv-

ers → Exchange → protocols SMTP». Открываем свойства default. На закладке «Access» выбираем «Relay Restric-tions» и записываем туда IP-адрес нашего Postfix-сер-вера. В некоторых случаях может потребоваться ука-зать подсети целиком. Например, в случае использова-ния приложений, напрямую общающихся с SMTP-сер-вером.

! Там же, на закладке «Delivery», выбираем «Advanced» и указываем в поле «Smart Host» IP-адрес Postfix-сер-вера в квадратных скобках.

! Здесь же, в поле «masquerade domain», указываем наш почтовый домен, для того чтобы Exchange отправлял всю почту от имени этого домена.

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

Этих настроек на данный момент достаточно. Более де-тальную настройку и конфигурирование оставляю на ва-ше усмотрение.

Настраиваем Postfix для работыс ExchangeОпределимся, что мы ожидаем от Postfix.! Принимать почту, пересылаемую ему Exchange и от-

правлять ее дальше в мир.! Проверять всю входящую и исходящую почту на виру-

сы.! Проверять всю входящую почту на наличие спама и вы-

ставлять ей соответствующие балы.! Для экономии трафика необходимо проверять, есть ли

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

! Пересылать все прошедшие проверку входящие пись-ма на Exchange.

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

задумываясь, есть ли такой почтовый пользователь;! предварительно проверять наличие пользователя в AD

и в случае его отсутствия не принимать почтовое сооб-щение.

По первому варианту вы можете посмотреть уже упо-минавшуюся здесь статью [1]. Однако я предпочел остано-

щаетесь к себе, попутно думая, а что же проще: настро-ить The Bat на работу с LDAP и найти какие-нибудь утили-ты, позволяющие получить данный функционал, или снес-ти The Bat со всех машин, и поставить туда Outlook, закрыв глаза на резко упавшую в этом случае безопасность? По-думав с полчасика, приходим к выводу: придется ставить Outlook, и не только его, что было бы только половиной бе-ды, но и Exchange в качестве почтового сервера. Посколь-ку начальнику может прийти в голову и еще что-нибудь не-приличное, типа внутрикорпоративного документооборо-та. Вместо MS Exchange можно, конечно, использовать и OpenXchange, Hula, Opengroupware и пр. Но мы остановим-ся на первом варианте.

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

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

В результате всех размышлений получается примерно следующий список задач:1. Установка на все рабочие машины Microsoft Office Out-

look в качестве почтового клиента.2. Установка на первый сервер (exchange) ОС Windows и

Microsoft Exchange (в данном документе будет подраз-умеваться версия 2003).

3. Установка на второй сервер (gate) ОС из семейства UNIX и Postfix (FreeBSD 5.3 и postfix 2.2 соответственно).

4. Настройка Exchange для работы с Postfix5. Настройка Postfix для работы с Exchange6. Дополнительное конфигурирование для поддержки alias

и прочего.

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

Одно из решений задачи уже было предложено в жур-нале [1]. Мы же в отличие от него будем использовать ва-риант проверки Postfix наличия почтового аккаунта в Win-dows-домене перед приемом почты.

Настраиваем Exchange для работы совместно с PostfixДля начала определимся, что именно мы хотим получить от Exchange в данной конфигурации:! Он должен получать почту, которую будет перенаправ-

лять ему Postfix и доставлять ее в соответствующие по-чтовые ящики пользователей.

! Почта пользователей, отправляемая за пределы доме-на, должна попадать в Exchange и пересылаться им для дальнейшей обработки на внутренний интерфейс gate для дальнейшей отсылки ее в мир уже Postfix.

44

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

виться на втором варианте. Это позволит нам существен-но сэкономить трафик и поможет уменьшить количество приходящего спама.

Для начала установим LDAP-client.

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

Приступаем к конфигурированию PostfixДля начала установите все минимально необходимые зна-чения. Что именно, можно узнать в документации на Post-fix и в Интернете.! Добавим в значение переменной «mynetworks» IP-ад-

рес Exchange-сервера (например, 192.168.1.2/32).! В качестве антивирусного сканера я использую ClamAV.

Как его подключить к Postfix, можно прочитать в ста-тье [2].

! Как подключить SpamAssassin, можно прочитать там же.

! Для проверки наличия учетной записи будем исполь-зовать LDAP-запросы к AD. Именно для этого мы и со-бирали Postfix с поддержкой LDAP. Внесем следующие записи в main.conf:

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

В результате данной процедуры Postfix будет опраши-вать домен на наличие пользователя с заведенным поч-товым ящиком типа [email protected]. В случае положи-тельного ответа письмо будет приниматься для дальней-шей доставки, в случае отрицательного – отвергаться с кодом, указанным в переменной unknown_local_recip-ient_reject_code.

! Чтобы Postfix после всех проверок отправлял письмо Exchange, добавим в main.conf:

и создадим файл /etc/postfix/virtual_transport:

где 192.168.16.5 – IP-адрес Exchange-сервера, а compa-ny.ru – домен, всю приходящую для которого почту сле-дует пересылать на другой сервер. Не забываем после создания или редактирования этого файла делать:

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

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

сан на эту рассылку.! Разобраться, как можно сделать алиасы в Exchange.

Для этого можно использовать два варианта:! Создать в Active Directory дополнительные SMTP-за-

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

! Там же можно создать запись типа CC для тех же це-лей.

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

Данный вариант является рабочим, проверен на офисе компании. Но у него есть как минимум один недостаток – он потенциально не защищен от атак типа DoS на AD, в случае большого количества одновременных внешних SMTP-сес-сий. Чтобы этого избежать, можно либо настроить в Post-fix ограничения на количество одновременных сессий, ли-бо скриптом по cron забирать информацию из AD и скла-дывать ее на машине с Postfix. Но это тема уже совсем дру-гой статьи.

Литература, ссылки:1. Полянский И. Postfix как шлюз для Exchange. – Журнал

«Системный администратор», №5, 2004 г. – 34-37 с.2. Почтовая система на базе Postfix, PostgreSQL, с филь-

трацией вирусов и спама на FreeBSD 5.3 – www.deepn-et.ru, раздел «Статьи».

3. http://forum.deepnet.ru.

virtual _ transport = hash:/etc/postÞx/virtual _ transporttransport _ maps = hash:/etc/postÞx/virtual _ transport

company.ru smtp:[192.168.16.5]

postmap /etc/postÞx/virtual _ transport

# cd /usr/ports/net/openldap22-client/# make install clean

# gmake tidy# gmake makeÞles CCARGS="-I/usr/local/include -DHAS _ LDAP" ↵ AUXLIBS="-L/usr/local/lib -R/usr/local/lib -lldap ↵ -L/usr/local/lib -R/usr/local/lib -llber"# gmake install

# имя Windows-доменаldapmap _ search _ base = dc=ofÞce, dc=company, dc=ru# IP-адрес PDCldapmap _ server _ host = 192.168.16.1# LDAP-портldapmap _ server _ port = 3268ldap _ timeout = 60ldapmap _ query _ Þlter = (&(proxyAddresses=smtp:%s) ↵ (|(objectClass=user)(objectClass=group) ↵ (objectClass=contact)))ldapmap _ result _ Þlter = %sldapmap _ result _ attribute = canonicalNameldapmap _ special _ result _ attribute =ldapmap _ scope = subldapmap _ bind = yesldapmap _ bind _ dn = ldapquery@ofÞce.company.ruldapmap _ bind _ pw = LdaPassworDldapmap _ cache = noldapmap _ dereference = 0ldapmap _ domain = ofÞce.company.ruldapmap _ debuglevel = 0virtual _ mailbox _ maps = ldap:ldapmapvirtual _ mailbox _ domains = company.ru

46

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

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

АЛЕКСЕЙ БАРАБАНОВАЛЕКСЕЙ БАРАБАНОВПолная виртуализация работы

Наконец-то диск с автоматически устанавливаемым Win-dows готов. Самое главное, что пользоваться им должны не системные администраторы, а обычные рядовые со-трудники обслуживаемых компаний. Такой диск позволя-ет произвести установку новой станции или переустанов-ку поврежденной станции без локального участия систем-ного администратора. Сотрудник, оставшийся без рабоче-го места, должен лишь в общих чертах представлять про-цесс установки. Ему достаточно поместить диск, заранее созданный по указанной методе и оставленный для тако-го случая на предприятии, в лоток CD-Rom и произвести перезагрузку компьютера, не забыв нажать «any key», что-бы активировать загрузку с CD. Единственный раз, когда ему придется проявить самостоятельность, это выбор мес-та, точнее, раздела, установки. Так как используется рус-сифицированная версия Windows, то все диалоги, опреде-ляющие выбор, переведены на русский язык и снабжены комментариями. У меня не было случая, чтобы кто-нибудь ошибся разделом. Это ведь так просто – нажать <Enter> и затем <L>. После чего самое главное для окружающих не трогать ни клавиатуру, ни мышку. Установка продолжается от 40 минут до полутора часов, в зависимости от мощности компьютера. В результате будет запущен сеанс Админис-тратора с уже известным паролем. Вот в этот момент при-ходит черед для приложения рук реального сисадмина-аут-сорсера. Обычно этому предшествует звонок с сообщени-ем, что установка завершена. С точки администрирования через сеть (автор это делает по каналам openvpn или pptp) поднимается подключение к удаленному рабочему столу. И затем неторопливо производится завершение настрой-ки рабочей станции. Например, так:! Бюджетам Администратор и localadmin устанавливают-

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

па.! Рабочей станции меняется имя на реальное.

Если у вас дома в телефоне нет гудка, позвоните

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

Мы можем это починить прямо из офиса.

ИтакИтак, когда диск для автоматической , когда диск для автоматической

установки уже у вас в руках, надо правильноустановки уже у вас в руках, надо правильно

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

станции еще и получить отчет. Обо всем этом станции еще и получить отчет. Обо всем этом

в последней, заключительной части статьи в последней, заключительной части статьи

об AutoIt.об AutoIt.

! Перезагрузка и далее снова подключение к рабочему столу как localadmin.

! Рабочая станция включается в домен.! Перезагрузка с последующим подключением к рабоче-

му столу как localadmin.! Выбранный доменный пользователь прописывается на

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

! Устанавливается принтер.! Пользователь localadmin выходит из системы.

Все! Станция готова к работе. Можно перед выходом распечатать на локальном принтере приглашение для со-трудника приступить к работе. После этого обрадованный решением его проблем сотрудник прекращает курить и на-чинает работать. А «утомленный» сисадмин переходит к кофе-брейку, что никак не раздражает его работодателя, так как происходит за десятки или даже сотни километров от кабинета строгого руководителя. Шутка, конечно, но так или иначе все свои действия сисадмин может выполнять в весьма комфортных условиях. Скорее всего, с только что установленной станции надо будет снять информацию для отчета или дождаться, когда эта информация поступит в ав-томатизированную систему учета, так как именно для это-го была предусмотрена установка snmp и настройка файр-вола для доступа из локальной сети. Отчет можно офор-мить по вкусу, например, так, как приведено на снимке с экрана http://www.barabanov.ru/arts/autoit/draw7-8.png, пос-ле чего остается его распечатать и заполнить приватной информацией. Если одновременно устанавливается боль-шое число станций, то возможность автоматически полу-чить их характеристики сильно облегчает создание отчет-ности, что уже прямо связано с закрытием работ у заказ-чика. Но даже на изолированной рабочей станции можно получить ту же самую отчетность прямо в процессе уста-новки. Например, используя утилиту cpu-z для детектиро-вания оборудования с http://www.panopsys.com, «обернув» ее скриптом на AutoIt, или просто воспользоваться данны-ми из реестра MS Windows, которые можно считать тем же самым AutoIt, и после форматирования записать в файл с отчетом. Вариант с cpu-z рассмотрим подробнее.

47№7, июль 2005

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

Для работы этого скрипта нужно скачать с указанного сайта утилиту cpu-z и, для того чтобы эта утилита могла за-пускаться автоматически без указания точного пути до ис-полняемого файла, подложить ее в $OEM$/$$/System32. Скрипт, который будет производить запуск, поместить в $OEM$/$1/InstData в откомпилированном виде. Далее ко-манду запуска запишем в общий командный файл :

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

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

Hикогда нас не благодарите. Мы любим это, и нам за

это платят!

Ссылки:1. Архив исходных текстов: http://www.barabanov.ru/arts/

autoit/src.tgz.

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

Эта задача должна иметь решение, независимое от раз-мера экрана и положения рабочего окна на нем. Для этого способ указания координат мыши переводим в относитель-ный, отсчитываемый от верхнего левого угла активного ок-на режим, задавая параметр «MouseCoordMode», равный 0. Но координаты курсора, отражаемые в перехватчике, име-ют абсолютное значение. Поэтому сначала определяем ко-ординаты точки, соответствующей верхнему левому краю окна, затем координаты нужной точки и только тогда пере-водим координаты второй точки в относительные. В нашем случае получается так: X=455-308=147, а Y=528-116=412. И именно 147 и 412 надо использовать в программе. Пол-ный текст программы приведен далее:

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

Листинг 1. Программа получения состава оборудования

AutoItSetOption ( "WinTitleMatchMode", 2 )AutoItSetOption ( "WinDetectHiddenText", 1 )AutoItSetOption ( "SendAttachMode", 1 ); open free desktopWinMinimizeAll ( )Sleep ( �1000� ); run testRun ( @ComSpec & " /c cpuz.exe", '' ,@SW _ HIDE )If WinWaitActive ( 'CPU-Z','',10 ) == 0 Then ExitEndIfSend ( '{RIGHT}' )Sleep ( '1000' )Send ( '{LEFT 2}' )Sleep ( '1000' )Send ( '{RIGHT 5}' )Sleep ( '1000' )FileDelete ( @WindowsDir & '\' & @ComputerName & '.html')AutoItSetOption ( "MouseCoordMode", 0 )MouseClick ( 'left', 147, 412, 1 )If WinWaitActive ( 'Сохранить как','',10 ) == 0 Then ProcessClose ( 'cpuz.exe' ) ExitEndIfSend ( '{DEL}' )Sleep ( '1000' )Send ( @WindowsDir & '\' & @ComputerName & '.html')Sleep ( '1000' )Send ( '{ENTER}' )If WinWaitActive ( 'CPU-Z','',10 ) == 0 Then ProcessClose ( 'cpuz.exe' ) ExitEndIfSend ( '!{F4}' )If WinWaitClose ( 'CPU-Z','',10 ) == 0 Then ProcessClose ( 'cpuz.exe' ) ExitEndIfIf FileExists ( @WindowsDir & '\' & @ComputerName & ↵ '.html') == 1 Then ; run browser Run ( @ComSpec & " /c rundll32 url.dll, ↵ FileProtocolHandler " & @WindowsDir & �\� ↵ & @ComputerName & '.html','',@SW _ HIDE )EndIfExit

Листинг 2. Вызов программы получения состава оборудования

/heap/Windows/uawsp2 # grep cpu-z ↵ \$OEM\$/\$1/InstData/GuiRunOnce.cmd

%systemdrive%\InstData\get_cpu-z_info.exe

Рисунок 2. Отчет о завершении установки

48

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

АВТОМАТИЗИРУЕМ ПОДКЛЮЧЕНИЕАВТОМАТИЗИРУЕМ ПОДКЛЮЧЕНИЕБАЗ 1С НОВОЙ ВЕРСИИ 8.0БАЗ 1С НОВОЙ ВЕРСИИ 8.0

Специалисты компании 1С значительно переработали систему безопасности в базах 1С новой

версии 8.0 по сравнению с прошлой 1С 7.7. В связи с этим архитектура программы изменилась

коренным образом. Как следствие стал иным и механизм подключения баз.

ИВАН КОРОБКОИВАН КОРОБКО

49№7, июль 2005

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

Мы уже знакомили вас с автоматическим управлени-ем подключения баз 1С v.7.7 с помощью сценария регистрации пользователей в сети (см. [1]). Поль-

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

Выбираем язык программированияДля создания сценариев регистрации пользователей сущес-твует множество языков, однако остановим свой выбор на KIXTart. Этот язык является стандартным языком програм-мирования сценариев компании Microsoft. Его дистрибутив можно найти в Microsoft Resource Kit или бесплатно загру-зить последнюю версию из сети Интернет (http://kixtart.org). Подробное описание функционала языка можно найти на этом же сайте.

Замечание: сценарии, созданные вами ранее на VB-Script, Jscript, могут быть легко переписаны под KIXtart.

Рассмотрим внутреннее устройствоклиентской части 1C v.8.0Как было сказано ранее, информация о подключенных ба-зах для версий 7.7 и 8.0 находится в разных местах. Теперь все данные хранятся в каталоге «Documents and Settings\%username% \Application Data\1C\1Cv8». Для успешно-го подключения баз необходимо в нем создать минимум два файла (1Cv8strt.pfl и v8ib.lst) и соответствующие ID баз папки. В каждой из них также должен быть создан файл usr.def. Файловая структура подключаемых баз приведе-на на рис. 1.

Управление отображением списка баз (визуальная структура) в браузере 1С осуществляется с помощью файла v8ib.lst (рис. 2). С помощью второго файла – 1Cv8strt.pfl ре-ализовано манипулирование такими параметрами, как раз-мер и положение браузера 1С на экране, сортировка спис-ка баз и т.д. В файле usr.def содержится имя пользователя, который последний открывал данную информационную ба-зу. Все три файла имеют кодировку utf-8, и соответственно создавать их необходимо именно в этой кодировке. В про-

тивном случае данные в браузере 1С будут отображаться некорректно либо не будут отображаться вовсе.

Управляем текстовыми файламив кодировке utf-8Объект FSO, традиционно используемый для создания тек-стовых файлов, не подходит, поскольку он не поддержива-ет требуемой кодировки (utf-8). Для решения поставленной задачи предлагается использовать объект ADODB.Stream. Управление текстовыми файлами подразумевает чтение и запись данных в файл. Приведу два соответствующих при-мера. Чтение данных из текстового файла:

В примере данные считываются из файла 1.txt в пе-ременную $GetFile. Параметр $Stream.Type может прини-мать значения 1(binary) или 2(text), в зависимости от ти-па данных, содержащихся в файле. С помощью параме-тра $Stream.CharSet управляют кодировкой чтения/записи данных в файл. Доступные для данной ОС кодировки пе-речислены в системном реестре HKEY_CLASSES_ROOT\MIME\Database\Charset.

Запись данных в текстовый файл:

В приведенном примере данные, на которые ссылает-ся функция Stream.WriteText(), записываются в файл 1.txt; С помощью параметра $Stream.Mode осуществляется уп-равление режимом работы с данными файла. Основные принимаемые значения – 1 (чтение – по умолчанию), 2 (за-пись) и 3 (чтение/запись).

Структура файла v8ib.lstВ файле v8ib.lst содержащиеся данные описывают один из двух объектов: папку или ссылку на базу. Существуют ссыл-

Рисунок 1. Файловая структура клиентской части 1С 8.0

Рисунок 2. Браузер 1С

$Stream = CreateObject("ADODB.Stream")$Stream.Type =2$Stream.CharSet = "Utf-8"$Stream.Open$Stream.LoadFromFile("1.txt")$GetFile = $Stream.Readtext()$Stream.Close

$Stream = CreateObject("ADODB.Stream")$Stream.CharSet = "utf-8"$Stream.Mode = 3$Stream.Open$Stream.WriteText("Записываемые данные")$Stream.SaveToFile("1.txt")$Stream.Close

50

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

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

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

Пример подключения локальной базы:

Пример подключения сетевой базы:

Синтаксис подкаталогаОписание каталога аналогично описанию баз, однако есть два принципиальных отличия: отсутствие параметра connect и значение параметра OrderInList=-1:

Структура файла 1Сv8strt.pflАнализируя создаваемый 1С файл и изменяя различные параметры, были приобретены знания по управлению на-стройками визуального представления браузера 1С, уме-ние назначать базу по умолчанию (при открытии браузера). Проанализируем фрагменты файла (листинг файла см. на сайте www.samag.ru, в разделе «Исходный код»):

Параметры «ShowIBsAsTree», «AutoSortIBs», «LRInfoBa-seIDList» могут принимать значения 0 или 1, исключение со-ставляет параметр «ShowRecentIBs» – принимаемые зна-чения от 1 до 9.

Алгоритм работы скриптаРаботу скрипта условно можно разделить на несколько частей:1. Генерация файла 1Сv8strt.pfl2. Обработка данных файла v8ib.lst:! Чтение, анализ и вычленение данных о локальных

базах.! Определение и формирование данных для подклю-

чения доступных сетевых баз.! Формирование файла v8ib.lst, создание соответству-

ющих каталогов, файлов def.usr.

Скрипт: файл 1cv8strt.pflФайл 1cv8strt.pfl статичен и меняется крайне редко, поэтому существует два варианта его создания на рабочей станции пользователя: первый – копирование с сервера (см. лис-тинг файла в приложении на сайте журнала www.samag.ru в разделе «Исходный код»), второе – его генерация с по-мощью сценария. Рассмотрим второй случай.

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

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

Таблица 2. Описание параметров, управляющих конфигурациейбраузера 1С

Рисунок 3. Параметры настройки браузера 1С

[1c8]ShowAsTree=1 AutoSort=1 DefaultBaseName=Сетевая база данных 1

�$DefaultBaseName=readproÞlestring("$conÞg _ ini","1c8", ↵ "DefaultBaseName")$meta _ 1c8=readproÞlestring("$conÞg _ ini","1c8", ↵

{"N",1},"ShowIBsAsTree",{"B",1},"AutoSortIBs",{"B",0},"ShowRecentIBs",{"B",0},"LRInfoBaseIDList",

[Тестовая локальная база]Connect=File="С:\Base";ID=28f15724-3c41-4753-b5a4-42bb454b8be3OrderInList=32768Folder=/Тестовые базыOrderInTree=65536

[Тестовая сетевая база]Connect=Srvr="sql.server.domain.ru";Ref="Enterprise _ test";ID=28f15724-3c41-4753-b5a4-42bb454b8be3OrderInList=16384Folder=/OrderInTree=32768

[Локальные базы]ID=7fa1d5a9-d087-4026-9eea-f18a233d618fOrderInList=-1Folder=/OrderInTree=16384

Таблица 1. Описание параметров, используемых в файлеv8ib.lst

51№7, июль 2005

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

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

Ранее описывалась структура этого файла. ID-номер ба-зы по умолчанию определяется в двойном цикле Do…Loop и зафиксируется в переменной $default_guid.

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

После наполнения переменной данными осуществля-ется запись ее содержимого в файл. Напомним, что файл 1cv8strt.pfl находится в каталоге «Documents and Settings\%username%\Application Data\1C\1Cv8».

Скрипт: файл v8ib.lst

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

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

Затем просмотрите и отберите элементы массива, ха-рактеризующие локальные базы. Признаком локальности базы является значение элемента connect, начинающегося с file=. Накопление данных осуществляется в переменную, которая потом также будет разложена в массив, но уже по другому признаку: переводу и возврату каретки на новую строку, а именно chr(13)+chr(10):

Поскольку нумерация баз меняется, существующие локальные базы данных необходимо переместить в отде-льную виртуальную папку, например, «Локальные базы», поэтому значения параметров OrderInList и OrderInTree не-обходимо обнулить, значения параметра Folder исправить на Folder=/ Локальные базы. Для этого необходимо обно-вить значения элементов массива:

После переприсвоения элементы массива $array_base могут иметь следующий вид:

� if instr(ucase($des), ucase($DefaultBaseName))<>0$default _ guid=right( $infos[1],len( $infos[1])-3)Endif�

$en=chr(13)+chr(10)�$cfg = $cfg + "{"+$en$cfg = $cfg + "{" + chr(34) + "LRInfoBaseIDListSize" + ↵ chr(34) + ","+$en$cfg = $cfg + "{" + chr(34) + "N" + chr(34) + ","+ ↵ $ShowAsTree+"}," + chr(34) + "ShowIBsAsTree" + ↵ chr(34) + ","+$en$cfg = $cfg + "{" + chr(34) + "B" + chr(34) + ","+ ↵ $AutoSort+"}," + chr(34) + "AutoSortIBs"+ ↵ chr(34) + ","+$en �$cfg = $cfg + "}"+$en

$FSO = CreateObject("Scripting.FileSystemObject"). ↵ GetFile($path _ to _ base+"1cv8strt.pß")if @error=0$FSO.Deleteendif$FSO.close

$Stream = CreateObject("ADODB.Stream")$Stream.CharSet = "utf-8"$Stream.Mode = 3$Stream.Open$Stream.WriteText($cfg)$Stream.SaveToFile($path _ to _ base+"1cv8strt.pß")$Stream.Closeendif

$fso = CreateObject("Scripting.FileSystemObject")$fso.DeleteFile($f _ name)$fso.close

a[0]= "[Тестовая сетевая база]" + chr(13) + chr(10) + ↵ "Connect= File = " + chr(34) + "С:\Base" + chr(34) + ↵ ";" + chr(13) + chr(10) + ↵ "ID=28f15724-3c41-4753-b5a4-42bb454b8be3" + chr(13) + ↵ chr(10) + "OrderInList=16384" + chr(13) + chr(10) + ↵ "" + chr(13) + chr(10) + "Folder=/" + chr(13) + ↵ chr(10) + "OrderInTree=32768"

$en=chr(13)+chr(10)

�$temp=""' расчленение строки на элементы массива.' Признак � наличие "["$array _ 0=split($GetFile,"[")for each $element in $array _ 0' "connect=Þle=" � признак локальности БДif instr(ucase($element),ucase("connect=Þle="))<>0 $element="["+$element $temp=$temp+$element endifnext

$array _ base=split($temp, $en) ' массив локальных баз

$virtual _ local _ folder="Локальные базы"

for $i=0 to ubound($array _ base)$element=$array _ base[$i]

if instr(ucase($array _ base[$i]),ucase("orderin"))<>0 $array _ base[$i]=left($element, ↵ instr($element,"=")) endif

if instr(ucase($element),ucase("folder="))<>0 $array _ base[$i]=left($element, ↵ instr($element,"=")+1)+ ↵ $virtual _ local _ folder endif

next

"base1c8preÞx")$ShowAsTree=readproÞlestring("$conÞg _ ini","1c8", ↵ "ShowAsTree")$AutoSort=readproÞlestring("$conÞg _ ini","1c8","AutoSort")�

52

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

Сетевые базыСоставление списка сетевых баз основано на чтении дан-ных из AD по следующему алгоритму: с помощью встроен-ной в KIX функции EnumGroup() просматривается список групп, в которые входит настоящий пользователь, и отфиль-тровываются только те из них, которые имеют заранее ого-воренный префикс в названии, например, «1с8$_»:

Итак, если пользователь входит в группу с указанным префиксом, то ему должна быть подключена соответствую-щая сетевая база данных. Параметры ее подключения на-ходятся в свойствах группы (см. рис. 4). Поле Description содержит название базы, которое совпадает с названием раздела в файле v8ib.lst. Месторасположение и ID-базы – значение параметра notes. Обратите внимание, что пара-метр Description представляет собой массив элементов, а notes – строку, которую будет необходимо превратить в массив. Однако прежде всего необходимо получить доступ к Active Directory с помощью ADODB.Connection и ADODB.Command и составить запрос.

Поскольку название группы все время меняется, то в соединение с AD необходимо интегрировать функцию EnumGroup():

Замечание: в приведенном примере название группы, возвращаемое функцией enumgroup() имеет вид domain\groupname, где domain – короткое имя домена. В SQL-за-просе к Active Directory должно фигурировать только имя группы, т.е. необходимо отбросить префикс «domain\», по-этому короткое имя группы будет выглядеть:

Данные, содержащиеся в массиве $infos необходимо преобразовать и добавить их в конец массива $array_base. При этом добавляемые в него элементы должны соответс-твовать ранее описанному шаблону для сетевых баз:

Формирование файловой структурыФайловая структура формируется внутри каталога «Doc-uments and Settings\%username%\Application Data\1C\

' определение имени текущено домена$Domain = "LDAP://"+GetObject("LDAP://RootDSE"). ↵ Get("defaultNamingContext")$objConnection = CreateObject("ADODB.Connection")$objCommand = CreateObject("ADODB.Command")$objConnection.CommandTimeout = 120$objConnection.Provider = "ADsDSOObject"$objConnection.Open ("Active Directory Provider")$objCommand.ActiveConnection = $objConnection $i=ubound($array _ base)DO $Group = ENUMGROUP($p) if instr("$Group","$meta _ 1c8")<>0 $1c8 _ group=right($group, ↵ len($group)-instrrev($group,"\"))

$strADSQuery = "SELECT name,info,description FROM ↵ '" +$domain+"' WHERE objectClass='group� ↵ and samaccountname='"+$1c8 _ group+"'"

$objCommand.CommandText = $strADSQuery

$st = $objCommand.Execute $st.MoveÞrstDo $name = $St.Fields("name").Value $description = $St.Fields("description").Value $des=""For each $element in $description $des=$des+$elementNext

$infos = split($St.Fields("info").Value,chr(13)+chr(10))

������������.$st.MoveNextUntil $st.EOF endif$p=$p+1UNTIL Len($Group) = 0

$1c8 _ group=right($group,len($group)-instrrev($group,"\"))

$i=ubound($array _ base)DO�$array _ base[$i]="["+$des+"]"$infos = split($St.Fields("info").Value,chr(13)+chr(10))$array _ base[$i+1]= "Connect="+$infos[0]$array _ base[$i+2]= $infos[1]$array _ base[$i+3]= "OrderInList="$array _ base[$i+4]= $infos[2]$array _ base[$i+5]= "OrderInTree="$i=$i+6�

$array _ base[0]= "[Тестовая сетевая база]"$array _ base[1]= "Connect=File="С:\Base";"$array _ base[2]= "ID=28f15724-3c41-4753-b5a4-42bb454b8be3"$array _ base[3]= "OrderInList="$array _ base[4]= "Folder=/ Локальные базы"$array _ base[5]= "OrderInTree="�������������.

$i=0$Temp=""Do$Group = EnumGroup($i) $i = $i + 1 If instr(ucase($group), ucase("1c8$ _ "))<>0����..EndIfUntil Len($Group) =0MessageBox("$Temp","",0,0)

Рисунок 4. Группа безопасности

53№7, июль 2005

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

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

Определив ID сетевой базы, в том же цикле Do..Loop (см. листинг скрипта на сайте www.samag.ru в разделе «Ис-ходный код»), необходимо создать соответствующую базе файловую структуру.

В каталоге «Documents and Settings\%username%\Ap-plication Data\1C\1Cv8» для каждой базы необходимо со-здать папку, название которой совпадает с ID этой базы, а в нем файл usr.def в кодировке UTF-8 со следующим со-держанием: {«У Вас нет доступа. Обратитесь к системно-му администратору»}. Это сообщение будет появляться в том случае, если у пользователя нет прав доступа к дан-ной базе данных 1С.

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

Листинг описания папок для тестовых и локальных баз выглядит следующим образом:

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

Из примера видно, что максимальное значение парамет-ра OrderInTree=32768. Ранее отмечалось, что начало нуме-раций и шаг значений параметров OrderInList и OrderInTree не имеют значения. Этот факт подтвержден многочислен-ными экспериментами. В качестве начала отсчета были вы-браны число 16384 и такой же шаг (заимствовано из 1С). Для удобства корректировки значений введены два коэф-фициента $w_1 и $w_2. Один из них управляет значениями OrderInList, а второй – OrderInTree соответственно. При та-ком способе установки нумерации получится, что в одном из каталогов нумерация параметра OrderInList начнется с од-ного числа, например, 32768, а в другом – 65536. В каждом из разделов нумерация произвольна и содержимое файла будет корректно считано браузером 1С. Листинг корректи-ровки данных следующий:

После того как все данные к записи приготовлены, мож-но приступить к записи в файл. В него следует записать со-держание трех переменных: две переменные содержат ин-формацию о создаваемых каталогах в браузере 1С, тре-тья – накопленные элементы массива $array_base (пере-менная s). Напомню, что файл v8ib.lst находится в катало-ге «Documents and Settings\%username%\Application Data\1C\1Cv8».

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

Литература:1. Коробко И. Автоматизация процесса подключения баз

1С с помощью сценария регистрации пользователей в сети. – Журнал «Системный администратор» №3, 2005 г. – 48-51 с.

$path _ to _ base=CreateObject("WScript.Shell").↵ SpecialFolders(5)+"\1C\1Cv8\"

� $id _ dir _ name=$path _ to _ base+right( $infos[1], ↵ len( $infos[1])-3)�

md $id _ dir _ name ; создание каталога

; создание файла def.usr$FSO = CreateObject("Scripting.FileSystemObject"). ↵ GetFile($id _ dir _ name+"\def.usr")if @error=0$FSO.Deleteendif$FSO.close

$Stream = CreateObject("ADODB.Stream")$Stream.CharSet = "utf-8"$Stream.Mode = 3$Stream.Open$Stream.WriteText("{"+chr(34)+"У Вас нет доступа. ↵ Обратитесь к системному администратору."+chr(34)+"}")$Stream.SaveToFile($id _ dir _ name+"\def.usr")$Stream.Close�

$local _ folder = "[Локальные базы]" + $en + ↵ "ID=7fa1d5a9-d087-4026-9eea-f18a233d618f" + $en + ↵ "OrderInList=-1" + $en + "Folder=/" + $en + ↵ "OrderInTree=16384"$test _ folder = "[Тестовые базы]" + $en + ↵ "ID=7fa1d5a9-d087-9636-9eea-f18a233d618f" + $en + ↵ "OrderInList=-1" + $en + "Folder=/" + $en + ↵ "OrderInTree=32768"

$const _ w=16384$w _ 1=1$w _ 2=3

for each $element in $array _ base if instr(ucase($element),ucase("orderintree"))<>0 $s=$s+$element+cstr($const _ w*$w _ 2)+$en $w _ 2=$w _ 2+1 else if instr(ucase($element), ↵ ucase("orderinlist"))<>0 $s=$s+$element+cstr ↵ ($const _ w*$w _ 1)+$en $w _ 1=$w _ 1+1 else $s=$s+$element+$en endif endifnext

$en=chr(13)+chr(10)�$Stream = CreateObject("ADODB.Stream")$Stream.CharSet = "utf-8"$Stream.Mode = 3$Stream.Open$Stream.WriteText($local _ folder+$en+$test _ folder+$en+$s)$Stream.SaveToFile($path _ to _ base+"v8ib.lst")$Stream.Close

54

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

УСТАНАВЛИВАЕМ И НАСТРАИВАЕМУСТАНАВЛИВАЕМ И НАСТРАИВАЕМWINDOWS SERVER UPDATE SERVICESWINDOWS SERVER UPDATE SERVICES

В компьютерной сети любого масштаба обновление всех программных продуктов

без специального средства будет занимать значительную часть вашего рабочего времени.

Внедрение службы управления этим процессом освободит ваше время для решения других

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

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

системы вашей компании.

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

В июне этого года вышла офици-альная версия службы Windows Server Update Services (WSUS),

предназначенной для централизо-ванного управления обновлениями и исправлениями корпоративных про-дуктов Microsoft: Windows XP Profes-sional, Windows 2000, Windows Server 2003, Office XP, Office 2003, SQL Server 2000, Exchange Server 2000 и Exchange Server 2003.

С большинством возможностей WSUS мы уже познакомили читате-ля в обзоре «Windows Server Update Services» (см. №4, 2005 г). А сегод-ня займемся установкой и первона-чальной настройкой сервера WSUS на компьютер с операционной системой Windows Server 2003 в среде Active Di-rectory. Установка на компьютер с Win-dows 2000 Server несколько отличает-ся. Так, Microsoft SQL Server 2000 Desk-top Engine (MSDE) для Windows 2000 Server не входит в состав дистрибути-ва WSUS, в отличие от Microsoft Win-dows SQL Server 2000 Desktop Engine (WMSDE) для Windows Server 2003. Подробнее об этом можно прочитать в документации к WSUS.

Ссылки на все необходимые для установки WSUS программы и доку-ментацию (в основном на английском языке) можно найти на домашней стра-нице WSUS (http://www.microsoft.com/windowsserversystem/updateservices/default.mspx).

Готовим все необходимое к установкеДля работы сервера WSUS, обслужи-

вающего до 500 клиентов, Microsoft ре-комендует использовать компьютер с процессором частотой не ниже 1 ГГц, оперативной памятью не менее 1 Гб.

Для установки WSUS файловая система сервера должна соответство-вать следующим требованиям:! системный раздел и раздел, пред-

назначенный для установки WSUS, должны быть отформатированы в файловой системе NTFS;

! для системного раздела требует-ся не менее 1 Гб свободного про-странства;

! необходимо не менее 6 Гб свобод-ного пространства на диске, где хранятся данные WSUS; рекомен-дуется 30 Гб;

! необходимо не менее 2 Гб свободно-го пространства на диске, куда про-граммой установки WSUS устанав-ливается Windows SQL Server 2000 Desktop Engine (WMSDE).

На компьютере, предназначенном для сервера WSUS, предварительно необходимо установить следующие компоненты Windows Server 2003:! Microsoft Internet Information Services

(IIS) 6.0;! Microsoft .NET Framework 1.1 с

п а к е т о м о б н о в л е н и я 1 д л я Windows Server 2003;

! Background Intel l igent Transfer Service (BITS) 2.0.

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

! Семейство Microsoft Windows 2000 с пакетом обновления 3 или вы-ше;

! Microsoft Windows XP Professional с пакетами обновления SP1 и SP2 или без них;

! Семейство серверов Microsoft Windows Server 2003.

Приступаем к установкеУстановку WSUS могут выполнить только члены локальной группы «Ад-министраторы». Размер дистрибути-ва WSUS – около 125 МБ. Для запуска мастера установки необходимо выпол-нить файл WSUSSetup.exe.

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

В следующем окне необходимо вы-брать параметры базы данных: можно установить WMSDE вместе с WSUS или использовать существующий Microsoft SQL Server 2000. Поскольку WMSDE входит в состав дистрибути-ва WSUS и является бесплатным про-дуктом, вряд ли найдутся причины от-казаться от его установки.

Следующее окно позволяет вы-

55№7, июль 2005

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

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

Параметры синхронизацииТеперь необходимо настроить типы за-гружаемых обновлений. Для этого на странице консоли администрирования WSUS щёлкаем по ссылке «Парамет-ры → Параметры синхронизации». От-кроется страница с настройками синх-ронизации WSUS (рис. 1).

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

В разделе «Продукты и классы» можно указать программные продук-ты и типы обновлений для них. Щёлк-нув по кнопке «Изменить» в левой час-ти раздела, открываем окно со спис-ком программ, для которых можно за-гружать обновления (рис. 2). Отмеча-ем продукты, которые есть в нашей се-ти и которые хотим обновлять.

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

брать веб-узел для использования сервером WSUS. Microsoft рекоменду-ет использовать существующий веб-узел IIS по умолчанию и 80-й порт. Ес-ли этот порт уже занят, потребуется со-здать отдельный узел IIS (специально для WSUS), работающий по настраи-ваемому порту.

В окне «Параметры зеркального обновления» можно указать управля-ющую роль этого сервера. Если это первый сервер WSUS в сети, пропус-каем это окно. Иначе, ставим флажок и вводим имя сервера верхнего уров-ня в поле «Имя сервера». После уста-новки WSUS будет предложено запус-тить консоль администрирования, ко-торая также доступна с других ком-пьютеров сети по адресу: http://<имя сервера WSUS>/wsusadmin. Для запус-ка консоли администрирования необ-ходимо быть членом группы «Админис-траторы WSUS» или членом локальной группы безопасности «Администрато-ры» на сервере WSUS.

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

Создаём группы компьютеровВажным моментом в на-стройке WSUS является создание групп компью-теров. Хорошей практи-кой является тестирова-ние вновь полученных с узла Microsoft Update об-новлений на небольшой группе типичных для се-ти компьютеров. Затем в случае успешного функ-ционирования тестовых компьютеров в течение некоторого времени, распространение об-новлений на остальные компьютеры сети.

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

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

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

Рисунок 1. Параметры синхронизации

56

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

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

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

В разделе «Обновления Windows Server Update Services» настраивает-ся автоматическая загрузка обновле-ний самого сервера WSUS. Естествен-но, нужно включить этот параметр для своевременной установки обновлений и исправлений WSUS.

БрандмауэрЕсли между сетью организации и ин-тернетом находится брандмауэр, возможно, понадобится его настро-ить. Для получения обновлений с уз-ла Microsoft Update сервер WSUS ис-пользует 80-й порт при подключении по протоколу HTTP и 443-й при под-ключении по HTTPS. Поэтому эти пор-ты должны быть открыты на брандмау-эре для исходящих соединений.

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

Параметры службы автоматического обновления клиентских компьютеровТеперь можно приступить к настройке службы автоматического обновления клиентских компьютеров. Если в сети используется служба каталогов Active Directory, можно и нужно использовать объекты групповой политики (GPO) для настройки клиентов. При отсутс-твии в сети развернутой службы ката-логов можно использовать локальную групповую политику.

Для этого в редакторе объектов групповой политики нужно открыть узел «Конфигурация компьютера → Административные шаблоны → Ком-

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

Параметры автоматического одобренияДалее необходимо настроить автома-тическое одобрение обнаружения и

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

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

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

Следующий раздел – «Источник обновления». Если это первый сервер WSUS в сети, оставляем загрузку с уз-ла Microsoft Update. В противном слу-чае указываем адрес и порт вышесто-ящего сервера WSUS, с которого будут загружаться обновления.

Последний раздел – «Файлы об-новлений и языки». Нажав на кнопку «Дополнительно», попадаем в окно на-стройки дополнительных параметров синхронизации (рис. 4). В группе пара-метров «Файлы обновлений» задаётся место хранения и в случае выбора мес-

Рисунок 4. Дополнительные параметры синхронизации

Рисунок 2. Добавление и удалениепродуктов

Рисунок 3. Добавление и удалениеклассов

57№7, июль 2005

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

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

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

Рисунок 5. Параметры автоматического одобрения

поненты Windows → Windows Update» (рис. 6). Если этого узла нет, то не-обходимо самостоятельно добавить административный шаблон wuau.adm. Каждый из параметров доста-точно подробно описан, поэтому ос-тановимся только на тех, которые не-обходимы для первоначальной на-стройки.

Откройте свойства параметра «На-стройка автоматического обновления» (рис. 7). Во включенном состоянии этот параметр может принимать одно из четырех значений:! Уведомлять перед загрузкой об-

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

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

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

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

Следующий пара-метр – «Указать раз-

мещение службы обновлений Micro-soft в интрасети» (рис. 8). Включа-ем и вводим путь к серверу WSUS в виде: http://<Имя сервера WSUS>.

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

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

СинхронизацияПосле настройки параметров щелкаем по ссылке «Синхронизировать сейчас»

Рисунок 6. Настройка автоматического обновления

58

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

Рисунок 7. Настройка автоматическогообновления

Рисунок 8. Размещение службыобновлений Microsoft в интрасети

Рисунок 9. Список обновлений

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

После синхронизации, сбора дан-ных о требуемых для клиентских ком-пьютеров обновлениях и их одобре-ния для установки (автоматического или ручного) начнётся процесс загруз-ки необходимых файлов с узла Micro-soft Update на сервер WSUS. В списке обновления помечаются характерны-ми значками в зависимости от состо-яния загрузки. Естественно, первона-

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

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

щем состоянии установки данного ис-правления на клиентские компьюте-ры. На вкладке «Редакции» выводит-ся список всех версий данного обнов-ления. Для изменения статуса одоб-рения необходимо щелкнуть по ссыл-ке «Изменить одобрение» в левой вер-хней части страницы в разделе «Зада-чи обновлений».

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

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

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

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

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

59№7, июль 2005

bugtraq

Выполнение произвольных командв CSV_DBПрограмма: CSV_DB 1.00.Опасность: Высокая.Описание: Уязвимость существует из-за недостаточной обработки входных данных в параметре file сценария csv_db.cgi. Удаленный пользователь может добавить произволь-ную команду к параметру и выполнить ее с привилегиями веб-сервера на целевой системе. Пример:

URL производителя: www.k-collect.net/cgi_lab/csv_db.htm.Решение: Способов устранения уязвимости не существу-ет в настоящее время.

http://[target]/csv _ db/csv _ db.cgi?Þl e=Þle.extention|command|

Отказ в обслуживании в IA eMailServer при обработке команды IMAP LISTПрограмма: IA eMailServer версии до 5.3.4.2019.Опасность: Средняя.Описание: Уязвимость существует из-за недостаточной обработки входных данных в команде LIST IMAP-серве-ра. Удаленный авторизованный пользователь может с по-мощью специально сформированной строки, содержащей символы (%x), вызвать аварийное завершение работы про-цесса MailServer.exe.URL производителя: www.tnsoft.com.Решение: Установите последнюю версию (5.3.4.2019) с сайта производителя.

Выполнение произвольного PHP-сценария в phpBB в коде highlightingПрограмма: phpBB 2.0.15.Опасность: Высокая.Описание: Уязвимость существует из-за некорректного использования функции preg_replace() в сценарии viewtop-ic.php при обработке входных данных. Удаленный пользо-ватель может с помощью специально сформированного запроса заставить приложение интерпретировать входные данные как PHP-сценарий и выполнить его.URL производителя: www.phpbb.com.Решение: Установите последнюю версию (2.0.16) с сайта производителя.

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

Удаленное выполнение PHP-кодав XML-RPC for PHPПрограмма: XML-RPC for PHP 1.1 и более ранние версии.Опасность: Высокая.Описание: Уязвимость в XML-RPC for PHP может позволить злоумышленнику выполнить произвольный PHP-код на це-левом сервере. Подробности не сообщаются.URL производителя: http://phpxmlrpc.sourceforge.net.Решение: Способов устранения уязвимости не существу-ет в настоящее время.

HTTP Request Smuggling-атакав различных proxy и веб-серверахПрограмма: Squid 2.5.STABLE7 и более ранние версии; Sun Java System Web Proxy Server 3.6 SP4; SunONE Web Server 6.1 SP4; DeleGate 8.9.2; Microsoft Internet Information Server 5.0, 6.0; Apache Tomcat 4.1.24, 5.0.19; BEA WebLogic Server 8.1 SP1; IBM WebSphere 5.0, 5.1; Oracle Application Server Web Cache 9.0.2; Oracle Application Server 9.0.2; Apache web server вер-сии 2.x до 2.1.6.Опасность: Низкая.Описание: Уязвимость позволяет удаленному пользова-телю произвести HTTP Request Smuggling-атаку (атаку со скрытым HTTP-запросом) и отравить кеш прокси-сервера. Удаленный пользователь может послать специально сфор-мированный HTTP-запрос, содержащий два поля заголов-ка Content-Length, что заставит уязвимый сервер и следу-ющий за ним HTTP-агент (веб-сервер или еще один прок-си-сервер) обработать этот запрос по-разному. Злоумыш-ленник может внедрить злонамеренный запрос в обычный и потенциально отравить кеш прокси-сервера.

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

Отказ в обслуживании в реализацииTCP-стека во FreeBSDПрограмма: FreeBSD 4.10, 4.11, 5.3, 5.4.Опасность: Средняя.Описание: Уязвимость в опции PAWS Timestamp позволя-ет удаленному пользователю послать большое количест-во специально сформированных пакетов с большим зна-чением таймера, что заставит систему воспринимать все последующие пакеты как старые и отвергать их. Удален-ный пользователь может разорвать все текущие TCP-со-единения.

Удаленный пользователь может послать специально сформированный TCP-пакет с флагом SYN и перезаписать определенные TCP-опции.URL производителя: www.freebsd.org.Решение: Установите обновление с сайта производителя.

Отказ в обслуживании в браузере Netscape при обработкеJavascript-функцийПрограмма: Netscape 8.0.2.Опасность: Средняя.Описание: Уязвимость существует при обработке специаль-но сформированных Javascript-функций. Удаленный пользо-ватель может создать специально сформированную HTML-страницу и вызвать отказ в обслуживании браузера.Эксплоит: www.kurczaba.com/html/security/0506241_poc.htm.URL производителя: browser.netscape.com/ns8/product/default.jsp.Решение: Способов устранения уязвимости не существу-ет в настоящее время.

60

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

Open-Xchange (OX) базируется на компонентах с от-крытым исходным кодом, таких как веб-сервер, поч-товый сервер c IMAP, база данных и сервер дирек-

торий. Сервер почти целиком написан на JAVA с присутс-твием элементов на языке С для участков, которые требу-ют большей безопасности. OX предоставляет пользовате-лю такие модули: портал, календарь, контакты, адреса, за-дачи, проекты, документы, знания, закладки, доска голо-сований, форум, веб-интерфейс для почты. Доступ к сер-веру OX можно получить из многих браузеров и програм-мных пакетов, например: KDE Kontact, Apples iCAL, Konquer-or, Mozilla Suite и многих других, основанных на открытых стандартах и интерфейсах. Также можно подключаться из MS Outlook или Palm-устройств с помощью OX-клиента, ко-торый доступен для скачивания с сайта.

В данной статье как операционную систему для OX бу-дем использовать FreeBSD версии 5.3, с локально уста-новленными пакетами: Apache2/Tomcat, Postfix/Cyrus, Post-greSQL, OpenLDAP и т. д. Но это не говорит о том, что вы жестко привязаны к такому набору компонентов. OX пре-красно работает на многих UNIX/Linux-подобных системах. Связки пакетов можно менять по вашему вкусу или основы-ваясь на уже установленных программных комплексах. На-пример, Apache2/Tomcat можно заменить на Apache1.3/jserv, Postfix/Cyrus на Exim/Сourier, использовать внешние базы данных, серверы директорий, почтовые серверы и т. д.

До того как вы приступите к установке OX, чтоб луч-ше представлять себе, как выглядит система, ее возмож-ности, интерфейс пользователя, рекомендую посмотреть скриншоты (http://mirror.open-xchange.org/ox/EN/community/screenshots.htm), поработать в demo-режиме с порталом и веб-интерфейсом для почты (http://mirror.open-xchange.org/ox/EN/community/online.htm).

Будьте внимательны! Автор не несет ответственнос-ти за возможную потерю данных при использовании дан-ной статьи.

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

тифицировать продукты или услуги, их соответствующих владельцев.

Подготовим окружение для OXВведем переменные для простоты написания и понима-ния:! OX_home=/usr/local/openxchange – папка, в которую бу-

дет установлен OX;! OX_install=/home/user/OX – в эту папку будем склады-

вать файлы, требуемые для установки;! p_dir=/usr/ports – папка, где лежит дерево портов Free-

BSD.

Для компиляции, инсталляции и работы OX потребуется установить такие программы из коллекции портов:! shells/bash – мощный интерпретатор команд, требует-

ся для запуска OX и просто в повседневной жизни ад-мина;

! security/sudo – программа для ограниченной раздачи прав администратора пользователям, нужна для запу-ска OX-сервера;

! java/jdk15 – Sun’s Java Development Kit под FreeBSD;! www/jakarta-tomcat5 – веб-сервер, позволяющий запус-

кать Java Servlet и JavaServer Pages;! lang/perl5.8 – язык программирования Perl;! www/apache2 – очень распространенный веб-сервер;! devel/apache-ant – основанная на Java утилита для сбор-

ки приложений;! net/openldap22-server – сервер директорий LDAP.

JavaМы будем устанавливать Native JDK для FreeBSD (http://www.freebsd.org/java/install.html). Напомню, что при установке Java понадобится около 2 Гб свободного места для раздела, на котором будет происходить компиляция пакета. Также для этого потребуются исходники и бинарные архивы Java.

Замечание: файлы надо скачать самостоятельно в свя-зи с лицензионными ограничениями. Для этого надо заре-

OPEN-XCHANGE – СВОБОДУ ГРУППАМ!OPEN-XCHANGE – СВОБОДУ ГРУППАМ!

ПАВЕЛ ЛЕБЕДЕВПАВЕЛ ЛЕБЕДЕВ

Многие из вас задумываются об альтернативе таким Groupware-продуктам, как MS Exchange Многие из вас задумываются об альтернативе таким Groupware-продуктам, как MS Exchange

и Lotus Notes. Наконец, нам стала доступна свободная версия Novell/SUSE Linux Open-Xchange-и Lotus Notes. Наконец, нам стала доступна свободная версия Novell/SUSE Linux Open-Xchange-

сервера (SLOX).сервера (SLOX).

61№7, июль 2005

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

гистрироваться на сайте www.sun.com, а потом со страни-цы http://www.sun.com/software/java2/download.htm, выбрав платформу Java(TM) SDK 1.5.0, скачать:! jdk-1_5_0-src-scsl.zip! jdk-1_5_0-bin-scsl.zip

Со страницы http://www.eyesbeyond.com/freebsddom/ja-va/jdk15.html:! bsd-jdk15-patches-1.tar.bz2

И положить архивы в папку $p_dir/distfiles.Как написано в BUILD, для начала процесса компиля-

ции нужен рабочий javac-компилятор. По умолчанию порт ставит java/linux-sun-jdk14, но можно использовать и род-ной java/jdk14 и java/linux-blackdown-jdk14:

Замечание: если процесс завис, нужно остановить его нажатием <Ctrl-C> и добавить Linux proc-файловую систе-му командами:

Запускаем процесс компиляции еще раз, предвари-тельно почистив порт java/jdk15 от уже скомпилирован-ного кода. По окончании проверяем, если вывод команды java -version похож на приведенный ниже, значит, установ-ка прошла успешно:

Для работы OX потребуются дополнительные jar-ком-поненты:! mail.jar – http://java.sun.com/products/javamail/downloads/

index.htm! activation.jar – http://java.sun.com/products/javabeans/

glasgow/jaf.html! xerces.jar – http://xml.apache.org/xerces2-j/download.cgi! jdom.jar – http://www.jdom.org/dist/binary

На момент написания статьи были использованы сле-дующие версии jar-архивов:! javamail-1_3_2.zip! jaf-1_0_2-upd.zip! Xerces-J-bin.2.6.2.tar.gz! jdom-1.0.tar.gz

Теперь создадим папки и распакуем в них архивы:

> cd $p _ dir/java/jdk15> sudo make install

TomcatУстановим сервлет-сервер и проверим его работу, для этого нужно запустить сервис Tomcat и пройти по ссылке http://127.0.0.1:8180. В результате должна появиться стра-ница с информацией о Tomcat:

Perl + модули, требуемые для OXИз дерева портов нам нужно установить следующие ком-поненты:! devel/p5-Storable! devel/p5-Time-Local! net/p5-URI! net/p5-perl-ldap! www/p5-CGI.pm! converters/p5-MIME-Base64! converters/p5-Convert-ASN1! security/p5-Net-SSLeay! security/p5-Digest-MD5! security/p5-Authen-SASL! security/p5-IO-Socket-SSL! textproc/p5-XML-NamespaceSupport! textproc/p5-XML-SAX-Base

Установка perl-модулей происходит так же, как и обыч-ных портов, например, установим devel/p5-Storable:

PostgreSQLУстановим SQL-сервер и добавим автоматический запуск при старте системы. Для этого в файл /etc/rc.conf внесем строку: postgresql_enable=”YES”:

Запустим скрипт инициализации базы данных OX. Сле-дует напомнить, что пароль для пользователя openxchange в PostgreSQL-сервере будет использоваться при конфигу-рировании OX в директиве --with-dbpass=:

После этого добавляем пользователя и создаем базу:

> sudo kldload linprocfs> sudo mount -t linprocfs linprocfs /compat/linux/proc

> sudo make clean && sudo make install clean> java -version

java version "1.5.0-p1"Java(TM) 2 Runtime Environment, Standard Edition(build 1.5.0-p1-root_08_apr_2005_22_00)Java HotSpot(TM) Client VM(build 1.5.0-p1-root_08_apr_2005_22_00, mixed mode)

> cd $OX _ install> unzip javamail-1 _ 3 _ 2.zip> sudo mv ./javamail-1.3.2 /usr/local/javamail> unzip jaf-1 _ 0 _ 2-upd.zip> sudo mv ./jaf-1.0.2 /usr/local/jaf> tar xzvf Xerces-J-bin.2.6.2.tar.gz> sudo mv ./xerces-2 _ 6 _ 2 /usr/local/xerces

> cd $p _ dir/www/jakarta-tomcat5> sudo make install clean> sudo /usr/local/etc/rc.d/020.jakarta-tomcat50.sh start> lynx http://127.0.0.1:8180

> cd $p _ dir/devel/p5-Storable> sudo make install clean

> cd $p _ dir/databases/postgresql80-server> sudo make install clean

> sudo /usr/local/etc/rc.d/010.pgsql.sh initdb> sudo /usr/local/etc/rc.d/010.pgsql.sh start

> sudo su -l -m pgsql%createuser �pwprompt

Введите имя нового пользователя: openxchangeВведите пароль для нового пользователя:Введите снова:Разрешить новому пользователю создавать базы данных? (y/n) yРазрешить новому пользователю создавать пользователей? (y/n) nCREATE USER

> tar xzvf jdom-1.0.tar.gz> sudo mv ./jdom-1.0 /usr/local/jdom

62

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

Кроме этого, для работы OX с PostgreSQL надо скачать JDBC (http://jdbc.postgresql.org).

В портах есть версия 8.0 databases/postgresql-jdbc, но мы предлагаем использовать коннектор версии pg74.215.jdbc3.jar, скачать который можно с сайта http://jdbc.post-gresql.org/download.htm:

Apache2 и AntНастала очередь веб-сервера, установим его и настро-им автозапуск. Также установим утилиту для сборки приложений. Для автозапуска Apache2 при старте сис-темы в файл /etc/rc.conf добавляем строку: apache2_enable=”YES”.

Для соединения сервлет-сервера Tomcat и веб-серве-ра Apache2 нам потребуется установить модуль mod_jk. На данный момент есть 2 версии этого модуля – mod_jk и mod_jk2, но так как mod_jk2 официально больше не под-держивается, использовать его не будем. Опираясь на ре-комендации разработчиков, вместо него возьмем www/mod_jk-apache2.

LDAPДля работы OX надо собрать LDAP-сервер с эксперимен-тальной функцией ACI (inside-the-tree access controls). Эта функция дает контроль над правами объекта в дереве.

Добавляем автоматический запуск при старте системы и разрешаем слушать только на внутреннем интерфейсе, для этого в файл /etc/rc.conf добавляем строки:

Установливаем OX и настраиваем взаимодействие с окружением

Инсталляция OXВсе готово для начала инсталляции OX. Первым делом необходимо скачать исходники OX с сайта (www.open-xchange.org). Я взял исходники версии 0.7.5, так как для нее на момент установки была русификация. Нам потре-буются файлы:! open-xchange-0.7.5.tar.gz

! OX-RU-Groupware.0.7.5.tar.gz! OX-RU-Webmail.0.7.5.tar.gz

Далее делаем такие операции:

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

Конфигурируем, компилируем и устанавливаем пакет OX. При этом обратите внимание на опцию --with-dbpass= и укажите тот самый пароль, который задан для пользова-теля openexchnge в PostgreSQL.

На данный момент у нас есть установленный OX и его окружение, приступим к пост-инсталляционному конфигу-рированию.

Login.pl (Perl/CGI)Настроим и проверим окно авторизации пользователя OX:

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

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

Создаём файл web.xml с таким содержимым. Этот файл требуется для того, чтобы Tomcat понимал, как обрабаты-вать запросы к groupware и webmail:

> sudo mkdir /usr/local/jdbc> sudo cp pg74.215.jdbc3.jar /usr/local/jdbc

> cd $p _ dir/www/apache2> sudo make install clean> cd $p _ dir/devel/apache-ant> sudo make install clean

> cd $p _ dir/www/mod _ jk-apache2 > sudo make install clean

> cd $p _ dir/net/openldap22-server> sudo make -DWITH _ ACI install clean

slapd _ enable="YES"slapd _ ßags='-h "ldap://127.0.0.1/"'

> cd $OX _ install> tar xzvf open-xchange-0.7.5.tar.gz> cd open-xchange-0.7.5

> ./conÞgure -help

> ./conÞgure �preÞx=$OX _ home \> --enable-webdav --enable-doc \> --with-mailjar=/usr/local/javamail/mail.jar \> --with-activationjar=/usr/local/jaf/activation.jar \> --with-jdomjar=/usr/local/jdom/build/jdom.jar \> --with-xercesjar=/usr/local/xerces/xercesImpl.jar \> --with-jsdkjar=/usr/local/jakarta-tomcat5.0/common/lib/ ↵ servlet-api.jar \> --with-jdbcjar=/usr/local/jdbc/pg74.215.jdbc3.jar \> --with-dbpass=open \> --with-runuid=www �with-rungid=www> make> sudo make install

> cd $OX _ home/share/perl/> sudo cp login.pl login.pm /usr/local/www/cgi-bin/> sudo /usr/local/etc/rc.d/apache2.sh start> lynx http://127.0.0.1/cgi-bin/login.pl

> cd /usr/local/jakarta-tomcat5.0/webapps> sudo mkdir -p servlet/WEB-INF/classes ↵ servlet/WEB-INF/lib> sudo cp $OX _ home/share/servlets/*.class ↵ ./servlet/WEB-INF/classes> cd servlet/WEB-INF/

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.// ↵

%createdb -O openxchange -E UNICODE openxchange

CREATE DATABASE

63№7, июль 2005

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

Скопируем jar-файлы для Tomcat из установленно-го пакета OX и проверим правильность работы Tomcat, просмотрев в браузере вывод http://127.0.0.1:8180/servlet/intranet:

Если сервер ответил:

это говорит о том, что всё идет нормально, продолжаем настраивать OX.

mod_jkНастроим взаимодействие Apache2 и Tomcat с помощью mod_jk. Для этого добавим в файл /usr/local/etc/apache2/httpd.conf, такие строки:

Скопируйте /usr/local/etc/apache/workers.properties.sam-ple в workers.properties. Измените hostname. Убедитесь, что две последние строки с правильными путями, в нашем слу-чае файл должен выглядеть так:

PostgreSQLС базой данных PostgreSQL проведем те же операции, кото-рые написаны в [1], сначала инициализируем базу, а потом наполним данными из файла, который идёт с пакетом OX:

Также потребуется изменить файлы конфигурации servers.conf в папках:! /usr/local/openxchange/etc/groupware! /usr/local/openxchange/etc/webmail

Для того чтобы OX получил доступ к созданной нами базе данных, нужно изменить:

на

OpenLDAPПриступим к настройке сервера директорий. Обратите внима-ние на то, что, если поменять суффикс «dc=example,dc=org» на что-то более родное типа «dc=good-domain,dc=ua», то это надо будет сделать во всех файлах конфигурации (до за-пуска OpenLDAP), а именно:! /usr/local/etc/openldap/ldap.conf! /usr/local/etc/openldap/slapd.conf! /usr/local/openxchange/share/init_ldap.ldif! /usr/local/openxchange/etc/admintools.conf

Изменяем конфигурацию OpenLDAP. Для этого в файле /usr/local/etc/openldap/ldap.conf добавляем строки:

а в файл /usr/local/etc/openldap/slapd.conf такие:

> cd /usr/local/jakarta-tomcat5.0/webapps/servlet/WEB-INF/lib> sudo cp $OX _ home/lib/*.jar . > sudo chown -R www:www /usr/local/jakarta-tomcat5.0/webapps/> sudo /usr/local/etc/rc.d/020.jakarta-tomcat50.sh stop> sudo /usr/local/etc/rc.d/020.jakarta-tomcat50.sh start> lynx http://127.0.0.1:8180/servlet/intranet

No running Server found. Please inform the Administrator!

LoadModule jk _ module libexec/apache2/mod _ jk.so

<IfModule mod _ jk.c>

JkWorkersFile /usr/local/etc/apache2/workers.propertiesJkLogFile /var/log/apache2/mod _ jk.logJkLogLevel errorJkMount /servlet/* test

Alias /servlet "/usr/local/jakarta-tomcat5.0/webapps/servlet"

<Location "/servlet/WEB-INF/">AllowOverride Nonedeny from all</Location>

</IfModule>

> sudo su -l -m pgsql

NAS _ CON _ CLASS _ NAME: ↵ jdbc:postgresql://localhost/openexchangeNAS _ CON _ USER: openexchange

NAS _ CON _ CLASS _ NAME: ↵ jdbc:postgresql://localhost/openxchangeNAS _ CON _ USER: openxchange

DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app _ 2 _ 3.dtd">

<web-app> <display-name>Servlet OpenXchange</display-name> <description>Servlet OpenXchange 0.7.5</description> <servlet> <servlet-name>intranet</servlet-name> <servlet-class>intranet</servlet-class> <display-name>OX Groupware</display-name> <description>OX</description> </servlet>

<servlet-mapping> <servlet-name>intranet</servlet-name> <url-pattern>/intranet</url-pattern> </servlet-mapping>

<servlet> <servlet-name>webmail</servlet-name> <servlet-class>webmail</servlet-class> <display-name>OX Webmail</display-name> <description>OX</description> </servlet>

<servlet-mapping> <servlet-name>webmail</servlet-name> <url-pattern>/webmail</url-pattern> </servlet-mapping>

</web-app>

worker.list=testworker.test.port=8009worker.test.host=localhostworker.test.type=ajp13worker.test.lbfactor=1workers.tomcat _ home=/usr/local/jakarta-tomcat5.0workers.java _ home=/usr/local/jdk1.5.0

BASE dc=example,dc=orgHOST localhost

include /usr/local/etc/openldap/schema/core.schemainclude /usr/local/etc/openldap/schema/cosine.schemainclude /usr/local/etc/openldap/schema/nis.schemainclude /usr/local/etc/openldap/schema/inetorgperson.schemainclude /usr/local/openxchange/share/openxchange.schema

pidÞle /var/run/openldap/slapd.pid

%psql -U openxchange openxchange < $OX_home/share/init_database.sql%psql -U openxchange openxchangeopenxchange=>INSERT INTO sys_gen_rights_template valuesopenxchange->('now','admin','now','','default_template','y','y','y','y',openxchange(>'y','y','y','y','y','y','y','y','y','y','y','y','y','y','y',openxchange(>'y','y','y','y','y','y','y','y','y','y','y','y','y','y','y',openxchange(>'y','y','y','y','y','y','y','y','y','y','y','y','y');openxchange=> \q

64

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

Теперь запускаем OpenLDAP:

Редактируем файл /usr/local/openxchange/share/init_ldap.ldif и меняем пароль для доступа к базе:

В этой строке newmailadminpass меняем на вывод ко-манды:

где YOURPASSHERE – пароль для доступа к OpenLDAP.Теперь импортируем данные для OX из файла /usr/local/

openxchange/share/init_ldap.ldif командой:

Создадим символические ссылки для OX на ldap.conf:

Добавляем пользователяТак как многие скрипты в папке /usr/local/openxchange/sbin используют в качестве оболочки /bin/bash, а оригиналь-ное расположение bash в FreeBSD /usr/local/bin/bash, сде-лаем символическую ссылку и добавим первого пользо-вателя OX:

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

Запускаем от root, появилась надпись зеленого цвета, что с LDAP все хорошо, а красным цветом, что база open-exchange в PostgreSQL не существует:

Возвращаемся в пункт PostgreSQL и смотрим, наша ба-за называлась openxchange, а OX использует для доступа базу openexchange, находим и исправляем строки, в фай-ле /usr/local/openxchange/etc/admintools.conf, который отве-чает за конфигурацию сервера:

Запускаем еще раз и получаем в ответ:

Теперь добавим группу:

Добавление первого пользователя и группы успешно завершено.

Apache2 / WebsiteНастроим взаимодействие веб-сервера и OX. Для этого со-здаем папки в директории data веб-сервера и скопируем в них контент, который идет вместе с OX.

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

Как написано в [2], файл sbin/correctfilespool в качест-ве интерпретатора содержит «#!/bin/sh», но, скорее всего, это какая-то модификация bash. Так что поменяем «#!/bin/sh» на «#!/usr/local/bin/bash». Также скрипт sbin/correctfile-spool использует GNU seq для счета от 0 до 255, но в со-ставе FreeBSD ее нет. Для решения проблемы можно вы-брать два пути. Первый поставить порт sysutils/coreutils и заменить все seq на gseq. Второй вместо seq использовать программу jot, идущую в стандартной поставке FreeBSD, и везде заменить «seq 0 255» на «jot 256 0».

Русификация интерфейсаПерейдем в папку, где лежат архивы, скачанные с сайта OX, раз архивируем и установим русификацию для Group-ware и Webmail:

> sudo /usr/local/etc/rc.d/slapd.sh start

userPassword: {CRYPT}newmailadminpass

> perl -e 'print crypt(YOURPASSHERE, ↵ pack("C2",(int(rand 26)+65),(int(rand 26)+65)));'

> sudo slapadd -l $OX _ home/share/init _ ldap.ldif

> sudo ln -s /usr/local/etc/openldap/ldap.conf ↵ $OX _ home/etc/groupware/ldap.conf> sudo ln -s /usr/local/etc/openldap/ldap.conf ↵ $OX _ home/etc/webmail/ldap.conf

> sudo ln -s /usr/local/bin/bash /bin/bash> sudo $OX _ home/sbin/adduser _ ox \> --username="test" \> --passwd="test" \> --name="Pavel" \> --sname="Lebedev" \> --maildomain="example.org" \> --ox _ timezone="Europe/Kiev"

Execute as root...or make sure slappasswd is in PATH

LDAP Successpsql: FATAL: database "openexchange" does not existSQL ErrorDeleting User from LDAP

DEFAULT _ SQL _ DB="openxchange"DEFAULT _ SQL _ USER="openxchange"

LDAP SuccessSQL Success

> sudo $OX _ home/sbin/addgroup _ ox �group=developers

Added Group developers to LDAP

> cd /usr/local/www/data > sudo mkdir -p cÞntranet/webmail> cd $OX _ home/share/groupware/data/> sudo cp -R images css javascript ↵ /usr/local/www/data/cÞntranet/> cd $OX _ home/share/webmail/data/> sudo cp -R images css javascript ↵ /usr/local/www/data/cÞntranet/webmail

> cd $OX _ home/sbin/> sudo sh ./correctÞlespool

> cd $OX _ install> tar xzvf ./OX-RU-Groupware.0.7.5.tar.gz> sudo cp -r ~/opt/html/RU ↵ $OX _ home/share/groupware/data/templates/> sudo cp -r ~/opt/locales/RU.dlc ↵ $OX _ home/etc/groupware/locales/

argsÞle /var/run/openldap/slapd.args

database bdbsufÞx "dc=example,dc=org"rootdn "cn=Manager,dc=example,dc=org"rootpw secretdirectory /var/db/openldap-dataindex objectClass eqindex uid,mailEnabled,cn,sn,givenname, ↵ lnetMailAccess,alias,loginDestination eq,sub

65№7, июль 2005

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

Теперь надо открыть файл login.pm. в папке /usr/local/www/cgi-bin и для добавления возможности выбора языка интерфейса изменить строку:

на

Замечание: если после перезапуска Groupware, Web-mail и Apache2, появится ошибка в файлах webmail.log или groupware.log:

Значит установлена неправильная версия OX-русифи-кации. Скачайте пакет русификации с такой же версией, как и устанавливаемый пакет OX.

Как, оказалось, для отображения иконок панели в ру-сифицированном интерфейсе потребуется создать папки RU и скопировать в них содержимое папок EN. Или как в примере сделать ссылку:

Запускаем ОХВот наступил долгожданный момент первого запуска OX. Что-бы вступили в силу сделанные изменения в настройках веб сервера и сервера сервлетов, нужно перезапустить службы Apache2 и Tomcat, для этого надо выполнить такие команды:

Перед запуском OX нужно отредактировать скрипты:! /usr/local/openxchange/etc/init.d/groupware! /usr/local/openxchange/etc/init.d/sessiond! /usr/local/openxchange/etc/init.d/webmail

на предмет того, что в FreeBSD используется синтаксис ко-манды ps, отличный от GNU/Linux ps. Для этого нужно за-менить «ps xao “%p %a”» на «ps xao “pid args”», и раском-ментировать строки:

После этого надо закомментировать строки:

и

Далее можно пробовать запустить openxchange:

Если появились ошибки при старте groupware, webmail и sessiond, нужно по аналогии со скриптами из папки /usr/local/openxchange/sbin в папке /usr/local/openxchange/etc/init.d для всех файлов заменить командный интерпретатор с «#!/bin/sh» на «#!/bin/bash».

После пробных неудачных запусков выяснились еще не-которые изменения, которые нужно внести. Для файлов в папке /usr/local/openxchange/bin изменить командный интер-претатор с «#!/bin/sh» на «#!/bin/bash» и заменить строку:

на

Хочется обратить внимание на то, что скрипт /usr/local/openxchange/etc/init.d/openexchange с опцией start будет ра-ботать, но вот опция status и stop работать не будут. Это свя-занно с тем, что в FreeBSD очень длинная командная стро-ка с опциями, в выводе команды ps укорачивается до на-звания команды, и однозначно определить, что запущено под этой командой, будет невозможно.

Для проверки после старта openexchange советую зайти по адресу: http://server_ip/cgi-bin/login.pl, где server_ip – адрес вашего сервера, ввести логин и пароль созданного пользо-вателя, выбрать groupware, язык локализации RU и нажать login. Во время входа портал будет медленнее работать. Но это нормально, OX проверяет новую почту для пользователя, а почтовый сервер еще не настроен. По наступлению тайм-аута ответа почтового сервера отобразится главная страни-ца портала. Все остальные функции портала будут работать, и можно будет насладиться проделанной работой.

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

Литература:1. Файл INSTALL из архива пакета OX.2. Установка OX на FreeBSD от Peter Schober – http://homep-

age.univie.ac.at/peter.schober/OX_on_FreeBSD.html.3. Форум OX – http://www.open-xchange.org/cgi-bin/simple-

forum.cgi.4. Документация по установке на другие операционные

системы – http://www.open-xchange.org/oxwiki/OXInstal-lations.

my $languages = ['DE','EN'];

my $languages = ['EN','RU'];

Language RU is in the wrong version

> sudo ln -s ↵ /usr/local/www/data/cÞntranet/images/top/EN ./RU> sudo ln -s ↵ /usr/local/www/data/cÞntranet/webmail/images/top/EN ./RU

>cd /usr/local/etc/rc.d>sudo ./020.jakarta-tomcat50.sh stop>sudo ./020.jakarta-tomcat50.sh start>sudo ./apache2 .sh stop >sudo ./apache2.sh start

sudo -u $USER $OX _ BIN >> $LOGFILE 2>&1 &ps xao "pid args" | grep -E ↵ '.*java.*-DappName=groupwareApp' | grep -v grep | ↵ awk '{print $1}'

ps axwww | grep -E '.*java.*-DappName=groupwareApp' | ↵ grep -v grep | awk '{print $1}'

su $USER -s /bin/bash $OX _ BIN >> $LOGFILE 2>&1 &

> sudo $OX _ home/etc/init.d/openexchange start

SERVER=$(test "$HOSTTYPE" == "i386" && echo "-server")

SERVER=$(test "$HOSTTYPE" == "FreeBSD" && echo "-server")

> rm -r ./opt> tar xzvf ./OX-RU-Webmail.0.7.5.tar.gz> sudo cp -r ~/opt/html/RU ↵ $OX _ home/share/webmail/data/templates/> sudo cp -r ~/opt/locales/RU.dlc ↵ $OX _ home/etc/webmail/locales/ > rm -r ./opt

66

hardware

LinuxBIOS является альтернативой обычным BIOS [1], выполняет те же самые функции, что и выпус-

каемые фирмами AMI (American Mega-trends), Phoenix (Phoenix Technologies), IBM, DELL и некоторыми другими, толь-ко на порядок быстрее, т.е. в 10-20 раз. LinuxBIOS производит инициализацию оборудования, проверку на исправ-ность модулей памяти и собственно на-чинает загрузку операционной систе-мы уже после 3 секунд (!) после вклю-чения питания. Многие коммерческие изделия затрачивают на эту же проце-дуру от 30 до 60 секунд. В дополнение ко всему, LinuxBIOS может быть скон-фигурирован уже из-под самого Linux во время работы.

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

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

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

му используют промежуточные чипы, известные как мосты. Первая шина – это FSB (Front Side Bus) – системная шина, на большинстве персоналок она соединяет процессоры между собой и между северным мостом. Серверный мост в свою очередь соединяет про-цессор с шиной памяти и PCI-шиной. На диаграмме показан только один се-верный мост, хотя их может быть и не-сколько. На платформах с процессо-рами AMD Opteron, например, исполь-зуется свой северный мост к каждому процессору, и системная шина соеди-няет только конкретный процессор к своему северному мосту. Другими сло-вами, не существует общей системной шины для Opteron.

Южный мост, который почти всегда расположен на 0-й PCI-шине, является следующим мостом в схеме. Задача южного моста – соединять PCI-шину с устройствами с набором более медлен-ных устройств и отвечать за функции записи/чтения BIOS Flash (рис. 1).

Когда ПЭВМ включается или же идет на перезагрузку, процессор пе-редает управление на адрес, который традиционно располагается на самой вершине памяти (TOM – Top Of Memo-ry) за вычетом 16 байт. То есть на архи-тектурах 8086 это был адрес 0xffff0, на платформах с современными процес-сорами этот адрес – 0xfffffff0. На пер-воначальном этапе единственным язы-ком, который понимает машина – это машинный код (Ассемблер). Маши-на активируется в несколько этапов. В результате, LinuxBIOS переходит из одной фазы в другую последователь-

но, по мере инициализации определен-ных ресурсов.

Фазы запуска LinuxBIOS (рис. 2):! Обрабатываются инструкции, ко-

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

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

! Загружается объектный «C»-код из Flash-памяти в оперативную па-мять. Объектный код может быть сжатом виде (заархивирован).

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

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

LinuxBIOS содержит опциональ-ную возможность старта при наличии проблем с обычным BIOS. Такая под-держка добавляется при компиляции проекта. Дополнительный код прове-ряет сохранность CMOS-памяти и оп-ределяет, был ли удачным старт ПЭВМ в предыдущей попытке. Если нет, то ис-пользуется альтернативная загрузка. В таком случае используется LinuxBIOS-

АНТОН БОРИСОВАНТОН БОРИСОВ

LLinuxinuxBIOS – ФУНДАМЕНТ ДЛЯ LBIOS – ФУНДАМЕНТ ДЛЯ Linuxinux??

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

кластерных системах, технология LinuxBIOS за 5 лет кластерных системах, технология LinuxBIOS за 5 лет

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

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

рабочих станциях. Так что же это – еще одна Basic Input/рабочих станциях. Так что же это – еще одна Basic Input/

Output System или что-то большее?Output System или что-то большее?

67№7, июль 2005

hardware

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

Корни и эволюция LinuxBIOSПроект LinuxBIOS был начат в Нацио-нальной Лаборатории Лос Аламос (Los Alamos National Lab – LANL) в сентя-бре 1999 года под руководством Рона Минниха (Ron Minnich). В предыдущие восемь лет он занимался построени-ем кластеров всех видов, в частности в 1994 году он подготовил свой пер-вый кластер на базе PC. Всё это вре-мя BIOS был краеугольным камнем в создании больших кластеров.

Так получилось, что некоторые тех-нологические разработки 1999 года послужили толчком для начала проек-та. В какой-то степени это и появление 1 Мб модулей FLASH-памяти на систем-ных платах и широкое использование PCI-шины, которая заменила устарев-шую ISA-шину. Также показательно, что Linux начал работать на таких машинах, как SGI Visual Workstation, на которых использовался свой вариант BIOS.

Что казалось ясным на том этапе, так это то, что если бы удалось скре-стить Linux с кодом в BIOS, то цели бы-ли бы достигнуты. Linux настраивает аппаратные средства намного лучше, нежели варианты BIOS того дня. Тре-бовалось написать простейший загруз-чик BIOS, который бы в свою очередь пускал ядро Linux. Дальнейшая иници-ализация была бы прерогативой Linux. Таким образом, возникло выражение – «Пусть этим займется Linux!»

Прежде чем начался полномасш-табный LinuxBIOS проект, в декабре 1999 года была продемонстрирова-на работа под названием «LOBOS», в ходе которой ядро Linux грузилось из Flash-памяти и дальше передавало уп-равление опять Linux-ядру, но находя-щемуся на жестком диске.

Проще и быстрееСамый простой способ достичь резуль-тата в Open Source-среде – это найти решения, которые уже работают. Поэ-тому следующим логическим шагом в развитии проекта стал поиск програм-много обеспечения схожей тематики. Джеймс Хендрикс (James Hendricks) вместе с Дейлом Вебстером (Dale Webster) нашли нечто похожее в про-екте OpenBIOS. После ознакомления с проектом за пять дней удалось со-здать тестовый вариант на платформе Intel L440GX+. Она загружалась, прав-да, не с холодной загрузки (когда сис-тема первоначально выключена и за-тем включается), а с горячего старта. Чтобы добавить эту функциональность (возможность холодного старта) при-шлось затратить пять месяцев.

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

открытие Джефом Гарзиком (Jeff Gar-zik) следующего факта – автор проек-та STPC BIOS предоставляет в обще-ственный доступ свой труд. Так, STPC BIOS становится фундаментом новой структуры LinuxBIOS. Дальнейшая ра-бота над кодом потребовала постоян-ной реорганизации, чтобы проект смог поддерживать многие системные пла-ты и логику, таким образом был зало-жен хороший фундамент для дальней-шего развития.

Следующие шесть месяцев были посвящены запуску LinuxBIOS на но-вых платформах. Первой платфор-мой без использования графических средств настройки (как в классических программах BIOS Setup) стала систем-ная плата Intel L440GX+, за которой последовала SiS 630. Именно с этого момента, т.е. с приходом фирмы SiS в проект, началась новая эра. Компания предоставляла схемотехнику, техниче-скую поддержку, ассемблерный код, т.е. действительно серьезно подошла к тому, чтобы запустить LinuxBIOS на своем продукте.

Вскоре выяснилось, что Linux мо-жет делать, а чего нет. Выяснилось, что ядро 2.2, с которым тогда работа-ли в проекте, не способно с нуля про-извести инициализацию PCI-шины. Этим пришлось заниматься LinuxBIOS. Пришлось вытащить код из Linux и с небольшими изменениями использо-вать непосредственно в LinuxBIOS, до-бавляя по мере необходимости расши-рения. Также вскоре выяснилось, что загрузка происходит настолько быст-ро, что IDE-диски не успевают старто-вать. Но вскоре и эта проблема была успешно решена.

По истечении следующих девяти месяцев LinuxBIOS успешно работал на двух платформах, будучи написан-ным почти полностью на C. Корпора-ции стали проявлять интерес к разра-батываемому продукту. Так, VIA и Acer предоставили спецификации на свои новые продукты, таким образом так-же была включена поддержка для их плат. Джеймс Хендрикс начал работу над SMP-поддержкой тем же летом. Патчи стали включаться в разработку Linux-ядра, а не как расширения в Linux-BIOS. С этой стороны Linux-ядро стало походить на унипроцессорное – добав-ление поддержки новых процессоров стало занимать меньше времени.

Рисунок 1. Упрощенная схемаклассической PC-архитектуры.Мосты � это логика, которая соединяетодну шину с другой

Рисунок 2. Фазы запуска LinuxBIOS

68

hardware

Летом того же года к проекту при-соединился Linux NetworX, и Эрик Бье-дерман (Eric Biederman) стал ключе-вой фигурой при добавлении подде-ржки Alpha-архитектуры. Он также произвел реорганизацию стартового кода управления памятью. Сотрудни-чество с Linux NetworX продолжает-ся и по сей день – фирма является са-мым крупным продавцом систем на ос-нове LinuxBIOS. Также немаловажной заслугой Эрика является создание ар-хитектуры LinuxBIOS следующей, вто-рой версии.

В конце года участники проекта выступали на Atlanta Linux Showcase 2000 и там познакомились со Стивом Джеймсом (Steve James) из Linux Labs. Это партнерство позволило менее чем за месяц построить 13-узловой клас-тер на базе LinuxBIOS для Supercom-puting 2000.

К следующему, 2001 году Linux Net-worX завершила портирование под Al-pha-платформу для машин DS10. Был построен кластер из 104 машин клас-са DS10, все под управлением Linux-BIOS. Машины грузились значитель-но медленнее, нежели системы на Pentium, поэтому для выхода в рабо-чий режим требовалось примерно 50 секунд, но все-таки скорость была до-статочно высокой. По сравнению с тем немодифицированные машины за то же время успевали выполнить лишь тест памяти.

Портирование под Alpha-машины продемонстрировало, что проект мож-но перенести и на другие платформы. Для того чтобы LinuxBIOS заработал на 64-битных системах, пришлось немно-го переработать программный код – раньше он ориентировался в основ-ном на 32-битные системы.

С 2001 года пришли новые разра-ботчики (всего их сейчас 11 человек) и продолжился перенос на другие плат-формы. Одна из них – это AMD Opteron. Оказалось, что все-таки некоторые процедуры лучше выполнять именно в LinuxBIOS, нежели в Linux, напри-мер, SMP-инициализацию. На примере SMP-инициализации для платформы AMD K7 SMP стало ясно, что некоторые процедуры лучше выполнять именно в LinuxBIOS, нежели в Linux.

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

чале пятого начинает проявляться за-интересованность крупных фирм в данном проекте. Так, в 2003 г. было продано продуктов, основанных на LinuxBIOS, на сумму 30 миллионов долларов. По сравнению с 2000 г., ког-да продаж таких продуктов не было. Неплохое начало, не правда ли?

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

LinuxBIOS работает на 64- и 32-бит-ных процессорах. Среди них: Alpha, K8, K7, PowerPC, P4, PIII, PII, Cyrix (VIA), Geode (сейчас AMD) и SC520 (AMD). Список системной логики слишком обширный, чтобы упоминать. Форм-факторы: от малых систем (PC/104), до самых больших K8. Портирование под IBM PPC 970 сейчас находится в развитии.

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

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

Успех в LANL показателен. В тре-бованиях министерства по энергети-ке США (а именно оно в конечном ито-ге является заказчиком LinuxBIOS) для постройки 2 последних класте-ров значилось – «необходимо постро-ить на основе LinuxBIOS». Всего же на данную работу предназначалось осво-ить около 19 миллионов долларов. Те компании, которые не захотели участ-вовать в движении проекта LinuxBIOS, не смогли отреагировать на данный за-каз. Те же, которые предвидели нечто подобное, были подготовлены. Пред-видение в данном случае сыграло зна-чительную роль.

ВыводыLinuxBIOS прошел длинный путь за че-тыре года – от стадии «Это возможно» до «Сделано!». LinuxBIOS использует-ся везде – от огромных кластеров до встраиваемых (embedded) систем, в MP3-плейерах, портативных класте-рах и т. п.

LinuxBIOS позволяет построить системы без громадного PC-багажа. Их можно оптимизировать под Linux и сделать еще более компактными и простыми. Для таких систем находит-ся применение.

Проект сейчас находится в своей второй стадии, LinuxBIOS V2. За че-тыре года 6 видов процессоров, более 50 системных плат и огромный багаж опыта. Сейчас для переноса на новую систему требуются дни, по сравнению с месяцами, как было раньше. Влия-ние проекта на мир вычислений толь-ко начинается!

Когда готовилась эта статья, глав-ный идеолог проекта Ron Minnich вы-пустил статью об использовании Linux-BIOS в разработке учебной мини-раке-ты. Подробности смотрите в [3, 4].

На этой оптимистичной волне раз-решите с вами распрощаться до сле-дующего выпуска, в котором мы не-посредственно займемся настройкой LinuxBIOS для аппаратной системы VIA EPIA-M.

Ссылки:1. http://en.wikipedia.org/wiki/BIOS.2. http://www.linuxbios.org.3. http://www.linuxjournal.com/article/

8120.4. http://www.linuxjournal.com/article/

8310.

70

hardware

УДАЛЕННО УПРАВЛЯЕМУДАЛЕННО УПРАВЛЯЕМBIOS SETUP BIOS SETUP

КРИС КАСПЕРСКИКРИС КАСПЕРСКИ

Каждый из вас хотя бы раз в жизни сталкивался с необходимостью войти в BIOS Setup

и слегка его «подкрутить» или починить «рухнувшую» Windows NT, Linux/FreeBSD.

Традиционно эта задача решается при помощи мыши и клавиатуры, но что делать,

если сервер физически недоступен?

Компьютеры семейства IBM PC долгое время рассматривались как недорогие рабочие станции

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

Вот, например, BIOS отказывает-ся грузиться, предлагая нажать <F1> для входа в BIOS Setup или <F2> для загрузки с параметрами по умолча-нию (см. рис. 1). Но сервер находится в другом конце города, да еще в по-мещении, ключей от которого у адми-нистратора нет. Знакомая ситуация, не правда ли? Другой вариант: после ус-

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

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

Удаленный контрольза BIOSПорядок загрузки BIOS в общих чер-тах выглядит так. Первым получает управление BOOT-block (загрузочный блок или первичный загрузчик, не пу-тать с boot-сектором!). Он выполняет инициализацию основного оборудова-ния (оперативная память, контроллер прерываний, системный таймер и т. д.), сканирует ISA-шину и подключает BIOS всех обнаруженных устройств (напри-мер, SCSI-контроллеров, видео-, се-тевых карт и т. д.). Перед завершени-

ем своей работы BOOT-block распако-вывает основной код BIOS (так назы-ваемый BIOS extensions, или вторич-ный загрузчик) и передает ему управ-ление. Вторичный загрузчик сканиру-ет PCI-шину и выполняет окончатель-ную инициализацию оборудования – распознает IDE-диски, при необходи-мости выводит интерактивный редак-тор BIOS Setup, распределяет систем-ные ресурсы между PnP-устройства-ми и, наконец, считывает boot-сектор с гибкого или жесткого диска.

Таким образом, BIOS, установлен-ные на картах расширения, получа-ют управление на самой ранней ста-дии инициализации, задолго до того, как начинается подсчет контрольной суммы CMOS или распаковка вторич-ного загрузчика. Кстати говоря, боль-шинство утилит «прожига» BIOS не трогают BOOT-block и даже если про-жиг прошел неудачно, ISA-слоты рас-ширения все-таки инициализируют-ся. С PCI-слотами все обстоит намно-го сложнее, и в общем случае они до-ступны только из вторичного загруз-чика (а он гибнет при неудачном про-жиге). Некоторые производители, на-пример ASUS, включают в BOOT-block специальный драйвер для работы с

71№7, июль 2005

hardware

Рисунок 1. BIOS отказывается грузиться до тех пор,пока не будет нажата клавиша <F1> или <F2>

Рисунок 2. Удаленное редактирование настроек BIOS Setupпо терминалу � это реальность!

Рисунок 3. Удаленная настройка дисков

PCI-шиной, чтобы материнс-кая плата могла инициализи-ровать видеокарту и хоть что-то вывести на экран, даже ес-ли основной код BIOS повер-жен. Но мне не известен ни один BIOS, BOOT-block кото-рого мог бы работать с шиной AGP или PCI-express.

Следовательно, все, что нам нужно, – изготовить «фик-тивную» ISA- или PCI-кар-ту, установить на ней «свой» BIOS и запрограммировать его на удален-ное управление. Когда-то я «дораба-тывал» древние сетевые карты (кото-рые просто выбрасывались), превра-щая их в «пульт» удаленного управле-ния, позволяющий редактировать на-стройки BIOS по локальной сети. Это совсем несложно сделать! Достаточно уметь программировать на Ассембле-ре и чуть-чуть разбираться в архитек-туре «железа» (см. рис. 2).

Впрочем, корпеть над отладчиком совсем необязательно, все можно ку-пить и готовое. Такие платы (они назы-ваются Remote Boards) выпускает мно-жество фирм. Обычно они представ-ляют из себя стандартную VGA-кар-ту с интегрированным COM-портом, к которому подключается внешний мо-дем. В некоторых моделях имеется Ethernet-порт. Его можно воткнуть в DSL-модем или соединить со Switch. Че-рез эти порты передается ко-пия экрана на удаленный мо-нитор и принимаются коман-ды от клавиатуры, в результа-те чего IBM PC превращается в самый настоящий «мейн-фрейм» и физического до-ступа к нему уже не требует-ся (см. рис. 3)!

Большой популярностью пользуется модель Remote In-sight от Hewlett-Packard, кото-рая вставляется в PCI-слот и управляется через 10/100 Мбит Ethernet-порту. Она подде-рживает как текстовые, так и графические режимы (вплоть до 1280х1024/256 цветов), пи-тается от внешнего источни-ка, что позволяет ей «нажи-мать» на кнопки «Power» и «Reset». В дополнение к уда-ленной мыши и клавиатуре

имеется возможность подключать уда-ленный дисковод и привод CD-ROM, без которых не обходится ни одна пе-реустановка системы. Это просто фан-тастика! Всегда можно загрузиться с Live CD и посмотреть, что случилось с сервером и сохранить уцелевшие дан-ные на любой носитель, который толь-ко будет под рукой. Это усиливает бе-зопасность системы, поскольку сер-вер, оснащенный «Remote Insight», мо-жет вообще не иметь никаких съемных носителей!

Кстати, о безопасности. Remote In-sight поддерживает SSL и 128-битное шифрование, что позволяет ему фун-кционировать даже на незащищенных каналах (а других каналов в распоря-жении рядового администратора за-частую просто не оказывается).

Все управление происхо-дит либо через telnet, либо через веб-браузер. Как бу-дет удобнее администратору. На сервере может быть уста-новлена практически любая операционная система: Win-dows 2000/2003 (Advanced Server, Data Center, Terminal Server, Standard или Enterprise Edition), Novell NetWare 5.1, 6.0, Red Hat Advanced Server2.1,

Red Hat Linux 7.3/8.0, SuSE Linux En-terprise Server V7/V8 и некоторые дру-гие (см. рис. 4).

Карту можно приобрести в магази-не или заказать по Интернету непос-редственно в самой Hewlett-Packard. Она обойдется в $399, которые явно стоят того! В принципе можно найти производителя и подешевле, но в от-ношении цена/функциональность этой карте равных нет, тем не менее она да-лека от идеала. Исходных текстов про-шивки нам никто не даст, и дорабо-тать «напильником» под свои конкрет-ные нужны ее не удастся (теоретичес-ки это возможно, но очень затрудни-тельно). К тому же качество реализа-ции протоколов шифрования находит-ся под большим вопросом. Возможно, в карте присутствуют отладочные лю-

ки или переполняющиеся бу-феры, которые позволят ата-кующему захватить штурвал управления в свои руки ( см. рис. 5)!

Этих недостатков лише-на PC Weasel 2000 от одно-именной компании. Вместе с самой платой покупатель по-лучает полный исходный код прошивки и лицензию на пра-во его изменения. Это все та же самая VGA-плата, только вместо Ethernet-порта на ней находится контроллер UART (он же стандартный COM-порт типа 16550). К сожале-нию, ее функциональность на-много беднее. Поддержива-ются только текстовые виде-орежимы и отсутствуют уда-ленные приводы, правда, со-храняется возможность «на-жать» серверу на «Reset» или посмотреть POST-коды, что-бы сразу оценить масштабы неисправности (см. рис. 6).

72

hardware

ISA-вариант обойдется вам в $250, а PCI – во все $350. Не слишком ли большая цена за открытую лицензию при урезанной функциональности? Не торопитесь с выводами. Исходные тек-сты – великая штука! Можно купить од-ну плату и установить ее на неограни-ченном количестве машин. Клониро-вать аппаратное обеспечение нам не понадобится. Если слегка переделать прошивку можно обойтись и стандарт-ными компонентами, но об этом – чуть позже. Сначала познакомимся с диа-метрально противоположным клас-сом устройств удаленного управления, среди которых, возможно, притаилось устройство вашей мечты (см. рис. 7).

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

шенно иной подход. Свое название они получили по трем первым буквам: Key-board, Video-monitor и Mouse. Коммута-тор представляет собой автономное устройство, подключаемое к компью-теру через стандартные PS/2 и DB-15 VGA-коннекторы. Их сигнал преобра-зуется в цифровой поток и передается на соседний KVM-терминал, подклю-ченный к удаленному компьютеру. Гру-бо говоря, мы как бы подключаем кла-виатуру, мышь и монитор очень длин-ными кабелями (см. рис. 8).

Можно настраивать BIOS Setup или рассматривать Windows, свалившуюся в синий экран, но ни удаленных диско-водов, ни даже возможности нажать на Reset у нас нет, то есть иллюзия пол-ного физического доступа оказывает-ся не такой уж и полной. Зато подде-рживаются практически все видеоре-жимы и в код BIOS не вносится ника-ких изменений, а в критических инфра-структурах это очень актуально. Внед-рять посторонний эмулятор в банковс-кий компьютер нам попросту не дадут, поскольку эта технология не сертифи-цирована, а вот у KVM-коммутаторов все необходимые сертификаты, как правило, имеются (см. рис. 9).

Подавляющее большинство мо-делей рассчитано на управление не-сколькими серверами с одного тер-минала, при этом сигнал пускается по экранированной витой паре с мак-симальной длиной в несколько сотен метров. Это совсем не Ethernet и в се-тевой концентратор его вставлять не-льзя! Для реального удаленного уп-равления по Интернету или модему нам потребуется установить допол-нительный компьютер, принимающий KVM-сигнал и с помощью специально-го программного обеспечения ретран-слирующий его в «удобоваримую» се-тевую форму. А это нехорошо! К счас-тью, некоторые модели поддерживают работу по модему или локальной сети. Такой тип KVM-коммутаторов называ-ется «over IP», хотя здесь не обходится без вариаций. Просто загляните в спе-цификацию: если там встретится что-то похожее на LAN или Dial-Up, это то, что нам нужно (рис. 10)!

Довольно хорошо зарекомендо-вала себя фирма Minicom, в ассорти-менте которой можно обнаружить по меньшей мере две подходящие моде-ли – Phantom Dial-Up Remote Access и

Рисунок 4. Плата удаленного управленияRemote Insight от Hewlett-Packard

Рисунок 5. Еще одна плата удаленногоуправления � PC Weasel 2000

Рисунок 6. Инженерное меню,высвечиваемое PC Weasel 2000

Рисунок 7. Плата удаленногоуправления типа eRIC enhancedRemote Management Card

Рисунок 8. KVM-коммутатор за работой

Smart IP Extender Switch Over IP. Пер-вая стоит в районе $800, вторая… – $3500. Для банков и прочих денежных учреждений такая сумма, может быть, и подойдет, но вот для мелкой конто-ры – навряд ли. Кончено, порывшись в магазинах, можно найти KVM-ком-мутатор и подешевле, но лучше соб-рать систему удаленного управления самостоятельно.

Как это работает,или Удаленный контроль своими руками!Для создания собственной системы удаленного управления нам понадо-бится любая PCI-карта и материнская плата, поддерживающая работу с PCI-шиной через BOOT-block (например, ASUS). На борту карты обязательно должна присутствовать «кроватка» с BIOS. На худой конец BIOS может на-ходиться в отдельной микросхеме, ко-торую несложно выпаять с платы и вот-кнуть в программатор. К сожалению, сетевые карты с «внешним» BIOS вы-ходят из употребления и найти их ста-новится все сложнее и сложнее. Сов-ременные Ethernet-контроллеры интег-рируют BIOS в микросхему чиспета, и мы уже не можем ничего с ним сделать (только не перепутайте BIOS с панель-ной для Boot-ROM, это совсем не од-но и то же!).

Вот и приходится пересаживать-ся на SCSI-контроллеры, цены на ко-торые упали до 10$-14$. Разумеется, речь идет о простейших моделях, но

73№7, июль 2005

hardware

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

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

Разработка прошивок обыч-но ведется на Ассемблере, но при желании можно использо-вать и высокоуровневые языки типа Си/Си++. Только ни в коем случае не используйте стандар-тные библиотеки ввода/выво-да и прикажите линкеру отклю-чить Start-Up. Для этого доста-точно переименовать функцию main в нечто вроде MyMain. Пос-кольку Си не поддерживает ба-зирования, откомпилированный код должен быть полностью пе-ремещаем (то есть выполнять-ся независимо от базового адреса за-грузки в память). Этого можно добить-ся, отказавшись от глобальных пере-менных и выключив все опции ком-пилятора, которые могут генериро-вать неперемещаемый код, о котором мы даже не подозреваем (например, контроль «срыва» стека). Если вы не уверены, что хорошо знаете «задний двор» компилятора, – не используйте его! Программируйте на Ассемблере. Он не подведет!

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

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

Теперь поговорим о методиках эму-ляции и перехвата. Для вывода ин-формации на экран BIOS использует свою собственную сервисную службу INT 10h. Она же используется на ста-дии первичной загрузки операционных систем семейства Windows и UNIX. Пе-рехватив это прерывание, мы сможем

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

Разумеется, без сложностей здесь не обходится. Поскольку в процессе инициализации BIOS вектора прерывания могут пе-реустанавливаться многократ-но, одной лишь модификации таблицы прерываний (т.е. клас-сического способа перехвата) будет явно недостаточно. Да, мы можем изменить far-указа-тель по адресу: 0000h:10h*sizeof(DWORD) == 0000h:0040h,перенаправив его на свой собс-твенный обработчик, но… че-рез некоторое время контроль за INT 10h будет утерян. Чтобы этого избежать, необходимо ус-тановить аппаратную точку ос-танова на запись этой ячейки памяти. В этом нам помогут от-ладочные регистры семейства DRx. Регистры Dr0-Dr3 хранят линейный физический адрес точки останова, а Dr7 опреде-ляет условия, при которых она срабатывает, заставляя про-цессор генерировать прерыва-

ние INT 01h, на котором должен нахо-диться наш обработчик, выполняющий повторную «экспроприацию» INT 10h у системы.

Пример работы с отладочными ре-гистрами приведен ниже.

Рисунок 9. Схема подключения KVM-коммутаторадля удаленного управления через Интернетили по модемному соединению

Рисунок 11. SCSI-контролер с несъемным BIOS (слева),он нам не подходит. Справа SCSI-контроллер со съемнымBIOS, который легким движением руки превращаетсяв плату удаленного управления

Листинг 1. Перехватчик передаетуправление нашему коду в моментзагрузки Boot-сектора

; перехватываем INT 01hMOV ax, CSXOR bx,bxMOV DS,bx; смещение нашего обработчикаMOV [bx], offset our _ vx _ code; относительно сегмента 0000hMOV [bx+2],bxMOV DS, ax

; устанавливаем точку останова; на исполнениеMOV eax,302h; линейный физический адрес; точки остановаMOV ebx,7С00h

; Заносим значения в отладочные; регистрыMOV dr7,eaxmov dr0,ebx

Рисунок 10. Внешний вид некоторых KVM-коммутаторов

74

hardware

Прерывание INT 10h поддержива-ет свыше сотни различных функций, номер которых передается в регистре AH. В частности, 02h управляет кур-сором, а 09h печатает символ. Естес-твенно, чтобы грабить вывод на экран, необходимо уметь отличать одну фун-кцию от другой и знать, чем именно каждая из них занимается. Описание функций можно найти либо в техничес-кой документации на конкретную виде-окарту (а если карта встроена в мате-ринскую плату, то в документации на серверный мост чипсета), либо в зна-менитом Interrupt List Ральфа Брауна, правда, он уже давно не обновлялся и сильно устарел. Последняя версия да-тируется летом 2000 года. С тех пор вышло множество новых карт! Впро-чем, базовые видео-функции не пре-терпели никаких изменений, и если от-бросить нестандартные видеорежимы, все будет работать на ура.

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

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

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

обыкновенный драйвер-фильтр, рабо-тающий, как VGA-miniport, и пересыла-ющий экранный вывод на «нашу» кар-ту расширения (рис. 12).

Некоторые системы удаленного контроля (например, уже упомянутый комплекс PC Weasel 2000) вместо пе-рехвата INT 10h просто грабят видео-буфер, что на первый взгляд суще-ственно упрощает реализацию. Не нужно возиться с отладочными реги-страми, рыться в Interrupt List и т. д. На самом деле даже в текстовом режиме имеется множество экранных страниц, а уж про графический мы вообще мол-чим! Причем совершенно неясно, как синхронизовать экранный вывод с его перехватом. Сканировать видеопамять с частой 50-60 Гц вполне реально, но вот запихать награбленные данные в модемный канал получится едва ли. А как это дело будет тормозить! Неуди-вительно, что PC Weasel 2000 работает только с текстовыми режимами!

Теперь перейдем к эмуляции вво-да с клавиатуры. Мышь рассматривать не будем, поскольку нормальные ад-министраторы свободно обходятся и без нее. Весь клавиатурный сервис со-средоточен в прерывании INT 16h, ко-торое мы должны перехватить. Когда программа (и в частности, BIOS Setup) ожидает нажатия на клавишу, она об-нуляет регистр AH и вызывает INT 16h. Конечно, существуют и другие вариан-ты, но этот – самый популярный. В этом случае наш обработчик прерывания должен поместить ASCII-код симво-ла, нажатого на удаленной клавиату-ре, в регистр AL и возвратить управле-ние. Естественно, все это будет рабо-тать только до перехода операционной системы в защищенный режим, а по-

сле – придется подгружать свой драй-вер, «садящийся» поверх стандартно-го клавиатурного драйвера и эмулиру-ющего ввод.

Удаленные диски реализуются совсем тривиально. За это отвеча-ет прерывание INT 13h. Функция 02h обеспечивает чтение сектора, 03h – его запись. Номер сектора передает-ся в регистрах CX и DX в CHS-форма-те. Удаленный CD-ROM реализуется чуть-чуть сложнее. Если вы не силь-ны в системном программировании, на первых порах лучше ограничиться виртуальными дискетами. Между про-чим, использовать физические диске-ты совсем не обязательно – удаленная машина может работать с их образом, записанным на жестком диске в виде файла. Для удаленной переустановки Windows NT этот прием вполне подхо-дит. А смену виртуальных дискет авто-матизировать совсем нетрудно.

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

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

Один маленький трюк напоследок. Если полноценная система удаленно-го управления вам не нужна и всего лишь требуется запретить BIOS тре-бовать нажатия на клавишу при за-грузке, то без дополнительного обору-дования легко обойтись. Достаточно загрузить прошивку основного BIOS в дизассемблер и найти все «ругатель-ные» сообщения. Перекрестные ссыл-ки приведут нас к машинному коду, ко-торый эти строки и выводит. Там же бу-дет код, ожидающий нажатия на клави-шу, который мы должны удалить. Пря-мой вызов INT 16h используется редко.

Рисунок 12. Принцип работы платыудаленного управления

75№7, июль 2005

hardware

Скорее всего, мы увидим что-то вро-де CALL xxx, где xxx – адрес функции-обертки. Для достижения задуманно-го мы должны заменить CALL xxx на «MOV AX,scan-code», указав скэн-код требуемой клавиши. Например, клави-ша <F2> в большинстве BIOS означа-ет «загрузку с настройками по умол-чанию», однако в некоторых случаях может потребоваться нажать <Enter> или <Esc>.

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

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

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

75

Ссылки:1. Remote Insight «Lights Out» boards –

обзор систем удаленного управле-ния (на англ.): http://www.paul.slad-en.org/lights-out/riloe.html;

2. Remote Insight Lights-Out Edition II – описание платы удаленного управ-ления от Hewlett-Packard с возмож-ностью заказа по Интернету (на англ.): http://h18004.www1.hp.com/products/servers/management/riloe2/server-slot-matrix.html;

3. PC Weasel 2000 – описание аль-тернативной платы удаленного уп-равления, микрокод, который рас-пространяется по открытой лицен-зии (на англ.): http://www.realweasel.com/intro.html;

4. Технические характеристики ог-ромного количества систем уда-ленного управления (преимущес-твенно KVM-коммутаторов, на англ.): http://www.kvms.com;

5. Raritan IP-Reach TR364 – описа-ние KVM-коммутатора TR364 (на англ.): http://www.42u.com/tele-reach_bk.htm;

6. Архитектура ввода-вывода персо-нальных ЭВМ IBM PC – электрон-ная версия книги, посвященной устройству IBM PC, которую на-стоятельно рекомендуется прочи-тать перед разработкой собствен-ной системы удаленного управ-ления (на русском языке): http://redlib.narod.ru/asmdocs/asm_doc_07.zip;

7. Ralf Brown Interrupt List – электрон-ный справочник по всем прерыва-ниям, портам ввода/вывода, «вол-шебным» адресам памяти, вклю-чая нестандартные расширения и недокументированные возможнос-ти (на англ.): http://www.ctyme.com/rbrown.htm.

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

Остается только прожечь обнов-ленный BOOT-block и можно наслаж-даться бесперебойной работой сер-вера!

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

76

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

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

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

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

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

Какой инструмент выбрать разработчикуУчитывая эти тенденции, многие фир-мы направляют свои усилия на разви-тие и совершенствование технологий и инструментария в области веб-про-граммирования. Примерами могут слу-жить технологии от Microsoft, под кото-рые созданы мощные средства разра-ботки (к примеру, Interdev), среда Zend Studio, созданная разработчиками языка PHP (см. [1]). Познакомившись с этими пакетами и осознав, насколько отличаются их функциональные воз-можности, у меня сложилось ощуще-ние некой ограниченности в средствах

РАЗРАБАТЫВАЕМ ИНФОРМАЦИОННЫЕ СИСТЕМЫ НА PHP РАЗРАБАТЫВАЕМ ИНФОРМАЦИОННЫЕ СИСТЕМЫ НА PHP МЕТОДОМ ВИЗУАЛЬНОГО ПРОГРАММИРОВАНИЯМЕТОДОМ ВИЗУАЛЬНОГО ПРОГРАММИРОВАНИЯ

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

разработки под свои задачи. Некоторых устраивает Блокнот, другие предпочитают Zend Studio

или Macromedia Dreamweaver. Мы предлагаем вам инструмент, позволяющий в ряде случаев

строить PHP-код целых информационных систем в автоматическом режиме.

ЕВГЕНИЙ ВОЯКИНЕВГЕНИЙ ВОЯКИН

77№7, июль 2005

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

доброй части программистов, пишу-щих на PHP. Действительно, предла-гаемая компанией Microsoft среда In-terdev содержит всё необходимое для построения динамических веб-стра-ниц, поддерживает визуальное про-граммирование интерфейса, параме-тры оформления документов и работу с базами данных.

В то же время почти все представ-ленные на рынке средства разработ-ки на языке PHP, включая даже доста-точно мощную среду Zend Studio, пред-ставляют собой лишь развитые текс-товые редакторы, ориентированные на работу с текстами на языках про-граммирования. Тем не менее, имен-но язык PHP, СУБД MySQL или Post-greSQL, как показывает практика, на-иболее часто выбираются нами при разработке целого ряда информацион-ных систем, особенно на *nix-платфор-мах. Эти средства обоснованно заслу-жили популярность своей простотой и, одновременно с этим мощностью и на-дежностью. Кроме того, они доступны бесплатно, что немаловажно для мно-гих разработчиков.

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

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

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

! поддержка визуальной методики программирования (как у «боль-ших братьев» – Delphi, C Builder).

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

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

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

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

ред этим будет изучение предмет-ной области, построение ее моде-ли, разработка логической, а затем физической модели данных в сред-ствах той или иной СУБД, нормали-зация базы и т. д.);

! запрограммировать базу данных непосредственно в СУБД;

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

! осуществить программирование интерфейсов;

! отладить ИС в целом.

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

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

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

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

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

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

78

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

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

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

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

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

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

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

ционной процедуре разработки при-ложений.

«Мощность», или степень, до кото-рой данная среда позволит вам авто-матизировать процесс разработки веб-приложений на PHP, вполне сопоста-вима с той, до которой позволяет ав-томатизировать разработку обычных приложений хорошо известные среды Borland Delphi и C Builder, а в некоторых случаях и превосходит их. Так, при ис-пользовании Синбада для построения интерфейсов к БД результатом рабо-ты программы может быть полностью функционально готовый интерфейс, полученный абсолютно без примене-ния ручного написания кода. В продук-тах Borland визуальное программиро-вание позволяет лишь построить поль-зовательский интерфейс – окно прило-жения. Любую смысловую связку ин-терфейсных элементов окна вам при-дется осуществлять вручную.

Разработка программы осущест-влена на Delphi, Синбад рассчитан на выполнение под управлением опера-ционной системы Microsoft Windows. Работоспособность программы про-верена в версиях 98, 2000 Profession-al, XP Pro, XP Home.

Работа с новым инструментомРабота в среде предусматривает ре-дактирование проектов. Каждый про-ект предполагает работу со своей БД и имеет ряд настроек – название, ка-талог, в котором хранятся файлы про-екта, нацеленность на различные опе-рационные системы (кодировки симво-лов Windows-1251, koi-8r, символы пе-реноса строки #13#10 или #10). Также задаются параметры для подключения к базе данных: ее тип, имя, логин, па-роль, имя сервера и т. п.

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

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

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

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

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

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

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

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

В качестве примера представлены свойства элемента place. Как видите, элемент имеет вид строки с выпада-ющим списком (размер равен 1). Для списка задано наполнение исходны-ми данными из таблицы place: исполь-зуются столбец id (для значений эле-ментов списка) и caption (для тексто-вых меток). При выборе имеется воз-можность определить условие отбора строк – в данном случае для напол-нения списка используются все стро-ки с id>10.

Преобразование элемента, имею-

79№7, июль 2005

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

щего эти свойства, в PHP-код приведет к формированию следующего фраг-мента кода (для СУБД MySQL):

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

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

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

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

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

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

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

Для генерируемого кода опреде-ляются следующие требования. Код должен:! отображать все элементы страни-

цы в таком же порядке, как они бы-ли расположены вами на рабочем поле среды при проектировании;

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

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

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

<SELECT NAME="place» SIZE="1"><?php $rz = mysql _ query("select id, ↵ caption from place ↵ where id>10 order by 1;"); while ($row = ↵ mysql _ fetch _ row($rz)) { print ("<OPTION VALUE=$row[0]> ↵ $row[1]</OPTION>\n"); }?></SELECT>

Рисунок 1. Пользовательский интерфейс среды «Синбад».Режим построения формы

Рисунок 2. Это окно позволит вам управлятьсвойствами списков выбора

80

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

По окончании обработки всех эле-ментов генерация главного сценария завершается включением в него тек-ста шаблона концевика файла.

Генерация вызываемого сценария происходит по похожей схеме. Основ-ным отличием от описанного механиз-ма является то, что в тело подчиненного сценария встраивается операция по ма-нипуляции данными непосредственно в БД. В случае, когда назначением стра-ницы является ввод данных, среда про-верит, достаточно ли информации для добавления новой записи в таблицу. Ес-ли с каким-либо полем записи не связа-но элемента, то это поле, в зависимости от типа, заполняется либо нулем, либо пустой строкой. При этом вам также вы-водится соответствующее предупреж-дающее сообщение (см. рис. 5).

Пример того, как в окне браузера отображается страница, проектирова-ние которой показано на рис. 1, пока-зан на рис. 4.

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

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

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

3) Использование строго ограничен-ного набора функций на языке PHP для работы с базами данных. Име-на функций хранятся во внешних текстовых файлах, редактирова-ние которых позволит вам работать в среде с практически любой СУБД, поддерживаемой языком PHP.

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

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

дополнен параметрами оформления с помощью стилей и т.п.

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

Доступ к даннымДля проектирования базы данных Синбад требует наличия в операцион-ной системе подключения к СУБД че-рез источник ODBC с именем Sinbad. Следует отметить, что вы должны со-здать такой источник в операционной системе до начала работы с програм-мой. Среда имеет интерфейс для руч-ного управления структурой базы дан-ных (см. рис. 6), позволяющий добав-лять и удалять таблицы в базе, управ-лять полями таблиц – удалять ненуж-ные, создавать новые, задавать их тип, вводить, изменять и удалять данные в любой из таблиц и т. п.

В случае если непосредственное подключение к серверу базы данных посредством источника ODBC невоз-можно (отсутствует доступ, в вашей системе нет источника ODBC требуе-мого типа и т. п.), можно определить источник любого типа, например, Mi-crosoft Access Driver (*.mdb), ссыла-

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

Рисунок 3. Пользовательский интерфейс среды «Синбад».Режим редактора кода

Рисунок 4. Так выглядит спроектированная страницав окне браузера

Рисунок 5. Выполняется преобразование в PHP-код.Отладочные сообщения

81№7, июль 2005

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

редственно в сервер СУБД. Универсальность и перено-симость дампа достигает-ся за счет применения в нем для управления структурой базы и данными операторов на языке SQL.

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

Пример структуры автоматически разрабатываемой базы данных при-веден на рис. 7. В качестве примера приводится интерфейс для базы дан-ных «афиши концертов».

Таким образом, при построении нового проекта некой информацион-ной системы Синбад позволяет пол-ностью снять с вас задачу проектиро-вания базы данных – она будет разра-ботана автоматически. Единственной рекомендацией в данном случае будет необходимость задавать для элемента осмысленное имя до назначения ему автопривязки к БД, так как при созда-нии полей таблиц будет использовано имя элемента.

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

сколько этапов, среди которых мож-но выделить:1) изучение предметной области, в ко-

торой производится разработка;2) построение модели предметной об-

ласти;3) разработка логической модели

данных;4) разработка физической модели

данных в средствах той или иной СУБД;

5) программирование базы данных непосредственно в СУБД.

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

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

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

Разумеется, при постро-ении сложных многоуровне-вых систем или при «класси-ческом» подходе к проекти-рованию информационной

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

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

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

Разрабатываемый продукт будет бесплатным, бета-версии в скором времени будут доступны по адресу http://evgy.opennet.ru.

Литература:1. Воякин Е. Zend Studio 4.0 – новая

версия, новые возможности. – Жур-нал «Системный администратор», №2, 2005 г. – 75-79 с.

Рисунок 6. Встроенный интерфейс управления базой данных

Рисунок 7. Схема автоматизации разработки структурыбазы данных

82

web

К настоящему времени в Интер-нете уже существует около двух миллиардов страниц. Ни одна

из возможных тем не ускользнула от упоминаний в Web. Каждую секунду в Сети добавляется примерно 25 но-вых сайтов.

РождениеСо времён создания сети Интернет од-ним из наиболее известных его серви-сов стала «Всемирная паутина» – World Wide Web. В 1991 году Пол Линдер (Paul Linder) и Марк П. МакКейгил (Mark P. McCahill) из Университета Миннесоты создали Gopher (полное название Go-pher State – штат сусликов, шутливое название штата Миннесота). Техноло-гия организации файлов в логическую систему меню обусловила его немед-ленное принятие как стандарт в сети Интернет. Протокол Gopher является непосредственным предшественником концепции и функций WWW. Серверы Gopher быстро распространились в се-ти Интернет, хотя в них не было гипер-текстовых ссылок и графических эле-ментов. Через короткий отрезок време-ни стало ясно, что возможностей таких серверов не хватает.

Самый большой сервер Gopher принадлежал европейской организа-ции CERN (Европейская лаборатория физики частиц высокой энергии). Эта организация стала движущей силой подключения Европы к Интернету.

Первые шагиВ 1992 году была создана Всемирная информационная сеть (World Wide Web или просто Web). Разработчиком тех-нологии был Тим Бернерс-Ли (Tim Ber-ners-Lee). Задача Сети заключалась в распространении информации посред-ством сетевой компьютерной техноло-гии. Технология WWW стала развити-ем идей Gopher.

В истории было немало учёных, чьи мысли опережали время, в котором они живут. Среди них был и Тед Нель-сон (Ted Nelson), который первым пред-ложил концепцию гипертекста в своей книге «Computer Lib/Dream Machines», опубликованной в 1974 году. В середи-не 90-х годов понятие гипертекста рас-ширилось и включило в себя идею ги-пермедиа, то есть добавление ссылок на графические видеоклипы и музы-кальные ролики.

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

«Три кита»новой технологииОсновой Web стали три новых техно-логии:

HTML (HyperText Markup Language, язык разметки гипертекста) – язык ло-гической разметки веб-страниц. HTML

«вырос» из более сложного языка SGML (Single Generalized Markup Lan-guage, ISO 8879) [1]. HTML как стандарт для разметки веб-страниц вышел в свет в ноябре 1995 года под названием «HTML 2.0». После чего были предпри-няты попытки его модернизации, одна-ко проект «HTML 3.0» так и не был ре-комендован интернет-консорциумом. Возможно, тогда потребностям веб-разработчиков вполне отвечал преды-дущий стандарт. С течением времени число пользователей WWW увеличи-валось, что привело к появлению сре-ди разработчиков всё более талантли-вых людей, которых возможности вто-рой версии HTML явно не устраивали. То есть паутина всего за два года раз-вилась до «HTML 4.0», который прак-тически в неизменном виде использу-ется и по сей день с незначительными изменениями.

В конце 90-х интернет-консорциуму стало ясно, что HTML не отвечает пот-ребностям Web, и любая новая версия HTML быстро устареет. Поэтому было предложено развивать расширяемый язык разметки: XML (eXtensible Markup Language) – новый стандарт оформле-ния самых разнообразных докумен-тов, в том числе и веб-страниц. Уни-кальность XML заключается в его не-ограниченной расширяемости в си-лу четкой структурированности дан-ных, возможности определения сво-их тегов и т.д.

ИСТОРИЯ РАЗВИТИЯ САЙТОСТРОЕНИЯИСТОРИЯ РАЗВИТИЯ САЙТОСТРОЕНИЯ

WWW является одним из наиболее динамично развивающихся сервисов глобальной сети

Интернет. За 14 лет развития сайтостроения была проделана большая работа по созданию

существующих стандартов, обеспечивающих не просто существование, а развитие WWW,

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

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

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

АЛЕКСЕЙ МОИСЕЕВАЛЕКСЕЙ МОИСЕЕВ

83№7, июль 2005

web

XML так сильно отличается от HTML, что был разработан XHTML (это осно-ванный на XML язык разметки гипер-текста, максимально приближенный к текущим стандартам HTML. Был опуб-ликован консорциумом в первый день 2000 года как переформулирование (Reformulation) HTML в XML.

HTTP (HyperText Transfer Protocol, протокол передачи гипертекста) ис-пользуется для передачи веб-стра-ниц от сервера к пользовательскому браузеру.

Веб-браузер – программа, необхо-димая для просмотра веб-страниц.

Практически сразу после создания Web был создан первый браузер, при-чём он распространялся совершенно бесплатно. Браузер назывался Mosa-ic, его создали в Национальном цен-тре суперкомпьютерных приложений при университете Иллинойса в 1993 году. Ничто в истории информацион-ных технологий не распространялось с такой же быстротой.

Более подробную информацию о WWW можно найти по ссылке [2], где есть ответы на все наиболее часто встречающиеся вопросы.

Нововведением в стандарте W3C HTML 4.0 явились листы стилей (style sheets), позволяющие отделять содер-жание HTML-документов от их пред-ставления. Связывая один сценарий со всеми страницами ресурса, вы мо-жете изменять внешний вид сразу все-го сайта, даже если со страницами в данный момент работают пользова-тели. В настоящее время существует стандарт Cascade Style Sheets Level 2 (CSS2), однако полностью его не под-держивает ни один браузер. Элемен-ты, поддержка которых реализована в тех или иных браузерах, как прави-ло, по разному «понимаются». Даль-ше всех в этой области продвинулись браузеры, выпускаемые под маркой Mozilla (Mozilla, Mozilla ForeFox, Mozil-la ThunderBird). В ближайшее время выйдет стандарт Cascade Style Sheets Level 3 (CSS3). Исследования [3] пока-зывают, что в текущее время наибо-лее популярным браузером является Internet Explorer, им пользуются около 89% пользователей WWW. На втором месте Mozilla, у которого около 6,8%. Среди остальных браузеров можно вы-делить: Opera, Konqueror, Lynx, а так-же браузеры, построенные на основе

Mozilla и недавно открытого кода Inter-net Explorer.

Быстрое развитиеЧисло пользователей WWW лавино-образно увеличивалось, благодаря чему всё большую роль в развитии паутины стал играть бизнес. Каждый день создавалось множество интер-нет-представительств компаний, ра-ботающих в различных сферах рынка. Каждый отдельный сайт представлял собой набор статических HTML-стра-ниц, CSS-таблиц стилей, а также гра-фических файлов. Для оперативного обновления и своевременного добав-ления новых разделов на сайт было необходимо держать в штате компа-нии группу веб-разработчиков. Сде-лать переоформление (редизайн) та-кого сайта вообще не представляется возможным, так как для этого необхо-димо отредактировать каждую стра-ницу в отдельности. Например, если на одну страницу уходит 20 минут, то на 1000 страниц уйдёт примерно 42 рабочих человеко-дня, что составля-ет чуть более двух недель работы не-большой группы веб-разработчиков при условии, что в это время им не будут давать срочных заданий. В ито-ге для переоформления ресурса от-дел информационных технологий бу-дет полностью парализован на отно-сительно длительное время, что недо-пустимо, за редким исключением. На рынке сформировалась потребность в автоматизированной системе пост-роения страниц сайта на основе напи-санных статей и HTML-шаблонов. Та-кие системы были названы CMS (Con-tent Management System, системы уп-равления контентом), они, как прави-ло, состоят из трёх частей:! Статическая часть – HTML-шабло-

ны.! Программная часть – в большин-

стве случаев интерпретируемые модули, которые также можно раз-делить по назначению! Пользовательские скрипты, по-

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

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

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

Благодаря шаблонам количество HTML-кода сокращается в десятки раз. К шаблонам обычно относят так-же CSS-код и JavaScript-код.

Программная часть вполне может быть написана на любом языке про-граммирования, однако при этом по-явится чрезмерная сложность отлад-ки и платформозависимость. В начале развития CMS использовали Perl (для UNIX-хостингов) и ASP (для Windows-хостингов). Популярность Perl (Prac-tical Extraction and Report Language) в те времена можно было объяснить це-лым рядом причин: простота синтакси-са, большие возможности интерпрета-тора, а главное – каждый администра-тор UNIX использовал его для управле-ния и настройки системы. То есть люди, чья работа хоть как-то связана с UNIX-подобными системами, уже владели практически всеми необходимыми зна-ниями для веб-разработки. Однако Perl изначально не был предназначен для этого. Поэтому параллельно существо-вали более адаптированные для Web языки (интерпретаторы). К ним можно отнести PHP (раньше понималось как Personal Home Pages, однако в послед-нее время расшифровывается как Hy-pertext Preprocessor), Python, KixtArt, Yo-Script (скриптовый язык, который длительное время использовался для отображения страниц в www.yahoo.com) и множество других. Работа над большинством таких языков прекра-щена, однако остальные начали раз-виваться быстрыми темпами. Напри-мер, PHP до 4-й версии обладал рядом недостатков, не позволявших ему по-лучить абсолютную популярность (на-пример, первые версии PHP позволя-ли писать лишь небольшие скрипты), однако в 4-й версии все они были уст-ранены. В текущий момент большинс-тво проектов работают именно на PHP-скриптах, однако также встречаются и Perl/ASP-движки.

Хранилище информацииВ качестве хранилища данных на лю-бом, сколько бы то ни было весомом

84

web

проекте используется база данных. В большинстве случаев это MySQL или PostgreSQL. Они получили широ-кую распространённость (особенно MySQL) благодаря тому, что отсутс-твует плата за использование обоих СУБД, а также они существуют под все платформы, используемые на WWW-серверах. Однако «дёшево хорошо не бывает», в случае если от сервера баз данных требуются работы с огромными объёмами данных, то приходится ис-пользовать Oracle, MS SQL либо дру-гие СУБД, осуществляющие достаточ-но быструю работу с большими объё-мами данных. Однако все они явля-ются платными. Об этом можно дол-го спорить. Для большинства CMS не нужны огромные объемы данных. Важ-нее скорость обработки SQL-запросов. Помимо перечисленных есть множес-тво других СУБД, каждая из которых обладает как недостатками, так и пре-имуществами по сравнению со своими конкурентами.

Все выше упомянутые СУБД явля-ются SQL-серверами баз данных. Ис-пользовать что-то работающее не на технологии Клиент/Сервер не пред-ставляется возможным, так как по ряду причин (например, на разных платформах существуют различные СУБД, каждая ориентирована под свой круг задач) нецелесообразно встраивать систему управления ба-зами данных (СУБД) в интерпретатор. С момента опубликования стандарта SQL92 СУБД, работающие на основе SQL-предложений, фактически стали единственным стандартом для серве-ров управления базами данных, су-ществующих в Web. Под SQL-предло-жением понимают команду SQL-серве-ру, однако в отличие от других команд, используемых для управления какими-либо приложениями ЭВМ, SQL-коман-ды являются весьма приближенными к человеческому языку, возможно, это и есть важнейшая причина, по которой их называют именно SQL-предложе-ниями, а не командами. Пример про-стейшего SQL-предложения «SELECT * FROM table_name».

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

1. Порталы. Используются для ин-формационных ресурсов, основ-ной целью ставят максимальное упрощение публикации статей и новостей. Могут включать в себя нижеследующие типы CMS как са-мостоятельные модули. Наиболее известные представители данного класса: PHP-Nuke, XOOPS.

2. Движки без SQL. Данное ответв-ление в разработке CMS развито наиболее слабо, так как исполь-зование в качестве хранилища ин-формации файлов вместо таблиц базы данных сопряжено со мно-жеством нерешаемых проблем (та-ких как одновременная запись в один файл несколькими копиями скрипта). Достоинство таких CMS заключается в том, что они мо-гут быть размещены на бесплат-ных хостингах. Есть несколько ре-ализаций данной идеи: Cute News, Gruppy.

3. Блог (название «блог» (blog) про-исходит от английского слова «we-blog». Русский термин – «сетевой дневник») – это сайт, на котором находятся личные заметки авто-ра. В основном заметками являют-ся ссылки на сайты, которые кажут-ся владельцу ресурса наиболее ин-тересными, и комментарии к ним. В большинстве случаев владель-цы блогов дают небольшие ком-ментарии на приведенные ресур-сы, другие же пытаются подробно описать сайт. Блог может содер-жать не только ссылки, но и прос-то электронный дневник пользо-вателя. В эту категорию можно от-нести следующие CMS: b2evolution, bBlog.

Сетевые дневники приобретают все большую популярность. Уже начинают активно обсуждать, кто же влиятельнее: СМИ или блоги. Они постепенно входят в жизнь рядового пользователя всемирной паутины – например, в Штатах вы-ходит телепередача о блогах. Су-ществует два способа начать вести блог: воспользоваться специаль-ным сервисом (например, LiveJour-nal) или установить к себе на сер-вер (платный или бесплатный хос-тинг) автономный блог, то есть ис-пользовать специализированную CMS.

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

5. Магазины. К магазинам можно от-нести любой сайт, при помощи кото-рого можно заказать какой-либо то-вар. В данном случае в определение «товара» может входить абсолютно всё, включая время доступа в Ин-тернет, минуты сотовой связи. CMS, позволяющие создать виртуальный магазин: MyMarket, osc2nuke.

6. Групповая работа (Groupware) – комплекс программного обеспе-чения, позволяющий организо-вать работу предприятия, отноше-ния с клиентами и заказчиками в Интернете. Обычно представляет закрытую полностью или частич-но часть сайта с возможностью от-слеживать сроки выполнения пос-тавленных задач, распределения ролей и временных нормативов. Возможно, выносить вопросы на обсуждения и решения вышестоя-щего руководства. В большинстве случаев иcпользуются следующие CMS: dotProject, eGroupWare, More-Groupware, phpCollab, PHProjekt.

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

85№7, июль 2005

web

наук, а также развития навыков эф-фективного использования инфор-мационных ресурсов. Таких систем существует не много: ATutor, Claro-line, LogiCampus, Moodle, Segue, Site@School.

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

Наиболее известная из существу-ющих ныне баз знаний – RFC (Re-quest For Comment, запрос на ком-ментирование, обычно описание работы с каким-либо протоколом и тому подобное, публикуется в виде небольшого документа, как прави-ло, с примером программы.).

9. Биллинг (Billing). Программное обеспечение, позволяющее про-вайдерам и реселлерам работать со счетами клиентов. Такие CMS являются неотъемлемой частью крупной системы учёта потребле-ния услуг пользователями. Зада-ча же CMS данной категории – в визуализации информации о пре-доставленных услугах, подключе-нии новых услуг, изменении теку-щих параметров, приёме плате-жей и т. п. Во всех случаях такие системы пишутся своими силами. Для примера можно привести бил-линг-панель RuWEB. В ней созда-но огромное количество тарифных планов, позволяющих пользовате-лям платить только за те парамет-ры хостинга (трафик, место на жёс-тком диске, MySQL, PHP, Perl), кото-рые используются в полном объё-ме. Пока ни одна другая фирма (ра-ботающая в этой секторе рынка ИТ-услуг) не воспользовалась этой, не-сомненно, удачной идеей.

10. Администраторская панель хос-

тинга. К этому классу относятся та-кие продукты, как «Direct Admin» и «Control Panel». Немало хостинг-провайдеров стараются написать панель управления для пользова-теля хостинга своими силами, од-

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

Альтернатива CMSДля того чтобы перевести статический ресурс под управление одной из CMS, необходимо создать его заново. Если на сайте уже имеются сложная струк-тура и большие объёмы данных, то це-на вопроса становится ощутимой да-же для относительно богатых органи-заций. Так как продолжение существо-вания в старом формате уже не пред-ставляется возможным, то формирует-ся спрос на продукт, позволяющий уп-равлять существующим статическим сайтом. Спрос порождает предложе-ние, и вот уже около пяти лет на рын-ке существует продукт IPI.CONTROL (www.ipi.ru). В первом приближении он выполняет функции «насадки» на сайт, позволяющей приблизить возможнос-ти такого ресурса к функциональности CMS. Текущие возможности системы (в плане CMS) для больших проектов оставляют желать лучшего – IPI пред-назначена для малого и среднего биз-неса. Однако профессиональные мар-кетологи сделали своё дело, что дало системе некоторое число постоянных потребителей, ежемесячно пополня-ющих бюджет компании, из которого идут деньги на дальнейшие разработ-ки. Важно отметить, система сделана таким образом, что позволяет в лю-бой момент прекратить пользоваться её услугами. В этом смысле её мож-но сравнить с некоторым инструмен-том (например, отвёрткой), взятым в аренду. Пока пользуетесь – платите, если чувствуете, что некоторое время (больше двух-трёх месяцев) вы не бу-дете использовать её, – то можно вре-менно отключиться… или вообще пе-рестать пользоваться услугами ком-пании. Возможно, в этом заключается одна из причин, почему скрипты сис-темы не продаются, а сдаются в арен-ду. Описанное свойство является боль-шим плюсом, который пока не реали-зован ни в одной системе управления

контентом, кроме рассматриваемой). В принципах работы этой организа-ции можно почерпнуть наиболее удач-ные идеи: если брать деньги не за са-му CMS, а за её аренду, причём раз-мещать её на своём сервере (тут важ-но учесть все условия к хостингу по-тенциальных будущих заказчиков), то это даст возможность предоставлять более эффективную поддержку кли-ентам, постоянно повышать безопас-ность и улучшать качество работы как самой системы, так и всего сервера в целом. При увеличении числа поль-зователей такой организации, рабо-ты программистами добавляется ми-нимум, что позволяет снижать плату для всех пользователей, а самое глав-ное – постоянно расширять возмож-ности системы. Если в первые дни су-ществования IPI.CONTROL могла лишь управлять содержимым сайтов, теперь это полноценный рабочий кабинет ад-министратора сайта. В системе реали-зован принцип единой администратор-ской панели. Это можно связать с тем фактом, что за последние четыре го-да в BugTraq не раз появлялись уязви-мости PHPNuke и других CMS, одна-ко о взломах сайтов на базе IPI.CON-TROL не было ни одного сообщения. Безусловно, использование IPI не яв-ляется столь массовым, как PHPNuke, по той причине, что последний беспла-тен, а IPI.CONTROL стоит больших де-нег, однако в случае появления бреши в PHPNuke её будут устранять некото-рое (возможно, продолжительное) вре-мя, а в случае с IPI можно связаться по сотовому телефону с директором и вы-сказать всё, что наболело.

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

Ссылки:1. http://www.w3.org/pub/WWW/Mark-

Up/SGML.2. http://www.boutell.com/faq.3. http://www.securitylab.ru/54639.html.

86

web

WebalizerПервая из рассмотренных программ и, пожалуй, наиболее распространенная – это Webalizer (http://www.mrunix.net/webalizer). Webalizer анализирует журналы сервера и гене-рирует статистические данные в формате HTML на основе информации, полученной из log-файлов. Также умеет ри-совать красивые гистограммы для лучшего восприятия ин-формации. Поддерживает анализ log-файлов FTP-серве-ров wu-ftpd и ProFTPD, а также прокси-сервера Squid. Вхо-дит в состав дистрибутива Red Hat 7.0 и выше. Для всех ос-тальных пакет с программой можно взять по адресу: http://www.mrunix.net/webalizer.

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

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

Основные позиции конфигурационного файла /etc/webalizer.example.conf выглядят следующим образом:

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

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

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

сайт;! с какого URL пользователь заходил для просмотра.

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

влять сбор статистики с нескольких сайтов;! большая информативность полученных результатов.

КТО, КУДА, ЗАЧЕМ ПРИШЕЛ,ИЛИ АНАЛИЗИРУЕМ ЛОГИ ВЕБ-СЕРВЕРА

Практически на каждом веб-сайте работает счетчик посещений. И это неудивительно:

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

паутины посещали наш сайт.

…Стой! Ты куда? Где тапочки, плед, кресло-качалка?Где это все? Я за вас носить буду?...

капитан команды КВН«Утомленные солнцем» г. Сочи

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

# rpm -qa | grep gd

# Определяет журнал сервераLogFile /usr/local/etc/httpd/logs/access _ log

# Определяет месторасположение отчетов WebalizerOutputDir /usr/local/etc/httpd/usage

# Имя хоста, который мониторитсяHostName www.example.com

# Задает имя файла, в котором будет содержаться информация# о посещении веб-сервера на протяжении одного годаHistoryName HistoryName webalizer.hist

# Возрастающая обработка позволяет использовать несколько# относительно небольших файлов журналов вместо одного

87№7, июль 2005

web

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

После инсталляции необходимо отредактировать файл httpd.conf и добавить следующие строки между тэгами сек-ции <IfModule mod_alias.c> и </IfModule>:

Для запуска Webalizer может использоваться несколь-ко параметров:! -c файл – альтернативный файл конфигурации. По умол-

чанию используется файл /etc/webalizer.conf.! -n name – имя машины, которое будет отображено при

выводе статистики.! -o каталог – каталог, в который будут помещены файлы

статистики.! -t название – заголовок отчета.! -F (clf | ftp | squid) – тип журнала: clf или ftp или squid.

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

Например, вот так:

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

Как выглядит отображаемая статистика, смотрите на рис. 1.

Usage Summary for yourdomain.com. Этот график ви-зуализирует суммарный трафик за последние 12 меся-цев. Информация будет доступна только с момента запус-ка Webalizer на сайте.

Summary by Month. Эта таблица содержит месячную статистику, выраженную в цифрах, средние показатели в день и суммарные показатели за каждый месяц.

Кликнув по названию месяца (подчеркнуто красной чертой), вы сможете получить детализированный отчет за каждый месяц.

Monthly Summary. Кликнув по ссылкам, вверху стра-ницы, вы перейдете в определенный раздел отчета. Ста-тистический месячный отчет (имеется в виду календар-ный месяц) предоставляет информацию на текущий мо-мент времени.

Hits By Response Code. Анализ кодов отклика (рис. 2)

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

# Задает заголовок отчета. Русские заголовки поддерживаются# (при условии настроенной локализации системы)ReportTitle

# Определяет расширение для файлов-отчетовHTMLExtension

# Позволяет использовать безопасное соединение HTTPS# для просмотра статистикиUseHTTPS

# Директива PageType указывает расширения файлов,# которые будут считаться веб-страницами.PageType htm*PageType cgiPageType phtmlPageType php* PageType pl

#GraphLegend#GraphLines #TopSites 30#TopKSites 10 #TopURLs 30 #TopKURLs 10 #TopReferrers 30 #TopAgents 15 #TopCountries 30 #TopEntry 10#TopExit 10#TopSearch 20#TopUsers 20#IgnoreSite bad.site.net#IgnoreURL /test*#IgnoreReferrer Þle:/*#IgnoreAgent RealPlayer#IgnoreUser root

Alias /usage/ "/home/httpd/usage/"<Directory "/home/httpd/usage"> Options None AllowOverride None Order deny,allow Deny from all Allow from 192.168.1.0/24</Directory>

* 2 * * * /usr/local/bin/webalizer* 2 * * * /usr/local/bin/webalizer ↵ -c /etc/call-net.webalizer.conf* 2 * * * /usr/local/bin/webalizer ↵ -c /etc/webalizer.hotofÞce.conf

Рисунок 1. Стартовая страница Webalizer

Рисунок 2. Статистика кодов отклика

88

web

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

Значения кодов:! Код 200 – все работает должным образом.! Код 206 – буквально – «частичное отображение содер-

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

! Код 304 – браузер пользователя (в первую очередь Netscape) использует сохраненное содержание либо из-влекает страницу из кэша. Это не является ошибкой.

! Код 404 – пользователь получил сообщение об ошибке и не увидел содержания страницы. Запрошенный поль-зователем документ отсутствует на сервере. Этот код также может выдаваться сервером неавторизованным пользователям, отказывая в доступе к закрытым доку-ментам.

Daily Usage Graph & Statistics. Этот раздел содержит информацию о количестве hits, files, sites и Kbytes, зарегис-трированных за каждый день. Эти данные помогают опре-делить, на какой день приходится пик трафика (рис. 3).

Hourly Usage Graph & Statistics. Этот раздел содер-жит информацию о количестве hits, files, sites и Kbytes, за-регистрированных для каждого часа суток на протяжении календарного месяца. Эти данные помогут определить, ког-да на сайт приходит больше всего посетителей, и вы смо-жете спланировать обновление веб-страниц на менее за-груженное время суток (рис. 4).

Top 30 Sites. Из этой таблицы вы узнаете, с каких сер-веров (хостов) на сайт заходят посетители. Вы сможете оп-ределить это по IP-адресу (набор цифр) или по DNS-адре-су (набор слов; например, coral.tci.com (рис. 5).

Top URLs. Эта таблица поможет вам понять, что конк-ретно посетители ищут на сайте. По крайней мере, вы смо-жете определить, какие страницы сайта являются наибо-лее посещаемыми (рис. 6).

Usage by Country Graph & Chart. Данная таблица содер-жит информацию о том, из каких стран и доменов на сайт заходят посетители. Жители США различаются по исполь-зуемым ими доменам (рис. 7):! Коммерческие США: .com! Сетевые: .net! Образовательные США: .edu! Правительственные США: .gov

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

Достоинства Webalizer:

! Доступность пакета.! Простота и гибкость настройки.! Достаточная информативность.

Недостатки Webalizer:

! Не очень удобный интерфейс отображения статистики.! Нет возможности обновлять статистику из браузера. Рисунок 3. Статистика по дням месяца

! Hits: Количество файлов, запрошенных с сервера кли-ентами. Включает в себя все графические файлы, CGI скрипты (например, обработчики форм), а также html-страницы.

! Files: Количество файлов, отправленных сервером по запросам. Включает в себя графические файлы и html-страницы.

! Sites: Количество уникальных мест в Интернете (хостов), откуда на сайт заходят посетители. Это самый объек-тивный показатель, по которому можно определить ко-личество уникальных посетителей сайта.

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

! URLs: Самые популярные страницы сайта. Этот показа-тель поможет понять, над какими страницами, возмож-но, стоит поработать.

89№7, июль 2005

web

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

AWStatsAWStats (http://awstats.sourceforge.net) – это система пред-ставления расширенной статистики по веб-сайту. Мощная и удобная программа, которая генерирует статистику на основе логов веб-сервера и представляет ее графически. Этот анализатор работает как через интерфейс CGI, так и в командной строке и отображает всю возможную информа-цию, содержащуюся в логах, в виде графиков на нескольких страницах. AWStats анализирует log-файлы таких серверов, как Apache, WebStar и многих других веб-, прокси-, wap-, ftp-, почтовых и других серверов. В отличие от Webalizer, раз-работанного на С, AWStats написан на Perl, поэтому и рабо-тает помедленнее, но этот недостаток компенсируется ку-да большей информативностью полученных результатов. Более прост и понятен в установке.

Пакет можно взять по адресу http://awstats.sourceforge.net. Последовательность действий при установке очень проста, скачиваете архив, распаковываете, затем запускаете про-грамму awstats_configure.pl. С ее помощью создается файл типа awstats.www.domain.com.conf, в котором необходимо будет явно указать следующие параметры:

А также при работе awstats_configure.pl в конфигураци-онный файл веб-сервера добавляются строки:

После создания своего конфигурационного файла и размещения awstats.pl в /cgi-bin (права на файл необходи-мо сделать 755) можно начать работать двумя способами:! обновить статистику через командную строку:

! напрямую обратившись к файлу www.domain.com/cgi-bin/awstats.pl.

При использовании первого способа есть дополнитель-ные возможности:! обработать статистику за нужный месяц (-month=12 для

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

не записывая в файл.

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

Рисунок 4. Общая статистика по времени суток Рисунок 5. Эта таблица показывает 30 сайтов, с которыхчаще всего приходят пользователи

# Путь к файлу с логамиLogFile="/usr/apache/logs/access _ log"

# Формат логов. Поддерживаются следующие типы:# 1 - combined log format # 2 - Old IIS log format # 3 - Webstar native log format.# 4 - common log formatLogFormat=1

# Где хранить данные от анализатораDirData="/awstatsdatadir"

# Размещение ваших CGI, сюда необходимо класть awstats.plDirCgi="/cgi-bin"

Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"Alias /awstatscss "/usr/local/awstats/wwwroot/css/"Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"

<Directory "/usr/local/awstats/wwwroot"> Options None AllowOverride None Order allow,deny Allow from all</Directory>

# ./awstats.pl -conÞg=www.domain.com

SiteDomain="www.domain.com"

# Разрешать или нет обновлять статистику через браузер# (Wbalizer такого не позволяет)AllowToUpdateStatsFromBrowser=1

90

web

Внешний вид отображаемой статистики смотрите на рис. 8.

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

Достоинства AWStats:

! Очень красивый и удобный интерфейс отображения ре-зультатов сбора статистики.

! Возможность работать как из командной строки, так че-рез браузер.

! Возможность создать выборочные статистические ре-зультаты.

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

Недостатки AWStats:

! Написан на Perl, за счет этого может медленно рабо-тать.

AnalogЕсли для вас статистика, получаемая при помощи описан-ных инструментов, покажется избыточной, существует еще один из анализаторов логов, называемый Analog (http://www.analog.cx). Самый простой (как мне показалось) из представленных образцов. Инсталяция и настройка заня-ла не больше 15 минут. Устанавливается из стандартного rpm-пакета analog-6.0-1.i386.rpm. Домашняя страница http://

www.analog.cx. После инсталляции в конфигурационном файле были изменены всего три строки:

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

или

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

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

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

Достоинства Analog:

! Быстро настраиваем.

Рисунок 6. Наиболее популярные страницы сайта Рисунок 7. Информация о принадлежности посетителейк географическому местоположению

LOGFILE /usr/local/apache/logs/access _ logOUTFILE /usr/local/apache/htdocs/report.htmlHOSTNAME "myname"

LANGFILE ru.lng

LANGFILE /usr/etc/httpd/analog/lang/ru.lng

# ./awststs.pl �help

91№7, июль 2005

web

! Подойдет для тех, кому не нужна слишком большая ин-формативность.

Недостатки Analog:

! Не слишком эргономичный интерфейс отображения ста-тистики.

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

Рисунок 8. Так выглядитотображаемая статистика в AWStats Рисунок 9. Пример отображения cтатистики Analog

! Существует проблема с русскими поисковыми строка-ми.

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

Удачи!

93№7, июль 2005

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

Теория и практика построения баз данныхД. КрёнкеКнига является переводом 9 издания фундаментальной ра-боты известного специалиста в области баз данных. В кни-ге приводится доскональное описание широкого круга за-дач и технологий, связанных с базами данных. Среди рас-смотренных тем: проектиро-вание баз данных (реляцион-

ная модель и нормализация), структурированный язык за-просов (введение в SQL, использование SQL в приложени-ях, перепроектирование), обработка многопользователь-ских баз данных (Oracle 9i и SQL server 2000), стандарты до-ступа (ODBC, OLE DB, ADO, ASP), рассказано о технологи-ях XML и ADO.NET. Так же приводятся подробные сведения о работе с объектно-ориентированными базами данных. В приложении вы найдете информацию о структурах данных и семантической объектной модели. Изложенный материал очень удачно сочетает теорию и практические работы. Кни-гу можно рекомендовать как программистам, так и админис-траторам баз данных.

Издательство «Питер», 2005 г. – 859 стр. ISBN 5-94723-

583-8 (ориг. 0-12-101514-1).Рубрику ведет

Александр Байрак

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

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

Издательство «КУДИЦ-ОБРАЗ», 2005 г. – 128 стр. ISBN

5-9579-0085-0 (ориг. 0-321-30472-6).

Автоматизация процессов тестированияИ. ВинниченкоЭта книга – единственное из-дание на русском языке, посвя-щенное такой актуальной теме, как тестирование программно-го обеспечения на этапе раз-работки. В вводной части – ос-новы автоматизации тестиро-вания ПО. Далее идет деталь-ное описание трех основных программных средств: Segue

SilkTest, Mercury Interactive WinRunner и Rational Robot. Отде-льная глава посвящена скриптовым языкам, входящим в со-став вышеперечисленных продуктов – TSL, 4TEST, SQABasic. В ходе описания представлены примеры работы с перемен-ными, массивами данных, операторами сравнения, цикла и условными операторами. Приводится подробная информа-ция о элементах интерфейса и функций (window, menu, button, editbox и др.) Рассмотрены вспомогательные функции выше-описанных программных средств. Не остались без внима-ния функции работы с базами данных и управление процес-сом исполнения. В приложении излагаются методы работы с нестандартными объектами в SilkTest и WinRunner.

Издательство «Питер», 2005 г. – 203 стр. ISBN 5-469-

00798-7.

Сетевые распределенные вычисления. Достиженияи проблемыМакс К. ГоффИнтереснейшая во всех отношениях книга. Изло-женный материал по сути является аналитическими рассуждениями автора на тему перманентной техни-ческой революции. Основ-ные темы книги: построе-

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

Издательство «КУДИЦ-ОБРАЗ», 2005 г. – 320 стр. ISBN

5-9579-0072-9 (ориг. 0-13-100152-3).

94

bugtraq

Переполнение буфера в zlibпри обработке сжатых потоков данныхПрограмма: zlib 1.2.2.Опасность: Высокая.Описание: Уязвимость существует в функции inflate_table() файла inftrees.c. Удаленный пользователь может создать специально сформированный архив, который вызовет пе-реполнение буфера и аварийно завершит приложение или выполнит произвольный код на системе с привилегиями те-кущего пользователя.URL производителя: www.gzip.org/zlib.Решение: Установите исправление с сайта производителя.

Обход ограничений безопасностив Hosting ControllerПрограмма: Hosting Controller 6.1 HotFix 2.1 и более ран-ние версии.Опасность: Низкая.Описание: Удаленный авторизованный пользователь мо-жет послать специально сформированный HTTP POST-запрос сценарию /Admin/Accounts/AccountActions.asp?ActionType=UpdateCreditLimit с произвольным параметром CreditLimit и изменить свои данные о кредите.URL производителя: hostingcontroller.com.Решение: Способов устранения уязвимости не существу-ет в настоящее время.

Отказ в обслуживании в ASP.NETв RCP-методеПрограмма: Microsoft .NET Framework 1.x, ASP.NET 1.x.Опасность: Средняя.Описание: Уязвимость существует в функции System.Xml.Serialization.Xml.XmlSerializationReader.ReadReferencedEle-ments() в RCP-веб-методе. Удаленный пользователь мо-жет послать методу специально сформированное SOAP-сообщение и потребить все доступные ресурсы процессо-ра на системе.URL производителя: microsoft.com.Решение: Способов устранения уязвимости не существу-ет в настоящее время.

Удаленное выполнение произвольного кода в Mozilla FirefoxПрограмма: Mozilla Firefox версии до 1.0.5.Опасность: Высокая.Описание: Уязвимость существует из-за недостаточной обработки клонированных объектов. Удаленный пользо-ватель может с помощью специально сформированно-го сценария выйти за пределы песочницы браузера, по-лучить доступ к привилегированным объектам и выпол-нить произвольный код на системе с привилегиями теку-щего пользователя.

Удаленный пользователь может создать специально сформированную HTML-страницу, которая обращается к внешнему приложению (Flash Player или QuickTime player) и затем с помощью javascript: и chrome: URL выполнить про-извольный код на целевой системе.URL производителя: www.mozilla.com.Решение: Установите последнюю версию (1.0.5) с сайта производителя.

Отказ в обслуживании и выполнение произвольного кода в KerberosПрограмма: krb5-1.4.1 и более ранние версии.Опасность: Высокая.Описание: 1. Двойное освобождение памяти обнаружено в функции krb5_recvauth(). Удаленный пользователь может выполнить произвольный код на целевой системе.

2. Уязвимость в реализации центра распределения клю-чей позволяет удаленному пользователю вызвать отказ в обслуживании или выполнить произвольный код на целевой системе. Удаленный пользователь может послать KDC спе-циально сформированные TCP-пакеты, освободить случай-ную область памяти и вызвать отказ в обслуживании.

3. Удаленный пользователь может послать специаль-но сформированные TCP- или UDP-пакеты и вызвать од-нобайтовое (single-byte) переполнение стека. Удаленный пользователь может выполнить произвольный код на це-левой системе. Уязвимость обнаружена в файлах kdc/do_as_req.c и kdc/do_tgs_req.c.URL производителей: web.mit.edu.Решение: Установите последнюю версию (krb5-1.4.2) от производителя.

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

Выполнение произвольного кодаи отказ в обслуживаниив Cisco CallManagerПрограмма: Cisco CallManager 3.2 и более ранние версии, 3.3-3.3(5), 4.0- 4.0(2a)SR2b, 4.1- 4.1(3)SR1.Опасность: Критическая.Описание: 1. Программное обеспечение некорректно об-рабатывает тайм-ауты сокетов в Realtime Information Server Data Collection (RISDC). Процесс RisDC.exe может потре-бить большое количество системных ресурсов и не за-крыть сокеты.

2. Удаленный пользователь может послать большое ко-личество специально сформированных пакетов службе CTI Manager (ctimgr.exe), что приведет к потреблению более 1 Гб памяти и рестарту приложения.

3. Удаленный пользователь может послать процессу ccm.exe большое количество специально сформирован-ных пакетов и заставить приложение потребить до 500 Мб памяти.

4. Удаленный пользователь может произвести большое количество неудачных входов в систему и вызвать утечку памяти в Admin Service Tool при включенной опции Multi Level Admin (MLA). Уязвимое приложение может потребить до 750 Мб памяти.

5. Удаленный пользователь может послать службе aupair.exe специально сформированные пакеты, вызвать переполнение буфера и выполнить произвольный код на целевой системе.URL производителя: www.cisco.com.Решение: Установите исправление с сайта производителя.

95№7, июль 2005

подписка на II полугодие 2005

Российская Федерация! Подписной индекс: 81655 Каталог агентства «Роспечать»! Подписной индекс: 87836 Объединенный каталог «Пресса России» Адресный каталог «Подписка за рабочим столом» Адресный каталог «Библиотечный каталог»! Альтернативные подписные агентства: Агентство «Интер-Почта» (095) 500-00-60, курьерская

доставка по Москве Агентство «Вся Пресса» (095) 787-34-47 Агентство «Курьер-Прессервис» Агентство «ООО Урал-Пресс» (343) 375-62-74! Подписка On-line http://www.arzy.ru http://www.gazety.ru http://www.presscafe.ru

СНГ В странах СНГ подписка принимается в почтовых отделе-ниях по национальным каталогам или по списку номен-клатуры АРЗИ: ! Азербайджан – по объединенному каталогу российских

изданий через предприятие по распространению печа-ти «Гасид» (370102, г. Баку, ул. Джавадхана, 21)

! Казахстан – по каталогу «Российская Пресса» через ОАО «Казпочта» и ЗАО «Евразия пресс»

! Беларусь – по каталогу изданий стран СНГ через РГО «Белпочта» (220050, г.Минск, пр-т Ф.Скорины, 10)

! Узбекистан – по каталогу «Davriy nashrlar» российские издания через агентство по распространению печати «Davriy nashrlar» (7000029, Ташкент, пл.Мустакиллик, 5/3, офис 33)

! Армения – по списку номенклатуры «АРЗИ» через ГЗАО «Армпечать» (375005, г.Ереван, пл.Сасунци Давида, д.2) и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул.Сарьяна, 22)

! Грузия – по списку номенклатуры «АРЗИ» через АО «Сакпресса» ( 380019, г.Тбилиси, ул.Хошараульская, 29) и АО «Мацне» (380060, г.Тбилиси, пр-т Гамсахурдия, 42)

! Молдавия – по каталогу через ГП «Пошта Молдавей» (МД-2012, г.Кишинев, бул.Штефан чел Маре, 134)

по списку через ГУП «Почта Приднестровья» (МD-33-00, г.Тирасполь, ул.Ленина, 17)

по прайслисту через ООО Агентство «Editil Periodice» (2012, г.Кишинев, бул. Штефан чел Маре, 134)

! Подписка для Украины: Киевский главпочтамп Подписное агентство «KSS» Телефон/факс (044)464-0220

Подписные индексы:

81655

по каталогу агентства «Роспечать»

87836

по каталогу агентства«ПрессаРоссии»

96

СИСТЕМНЫЙ АДМИНИСТРАТОР

№7(32), Июль, 2005 год

РЕДАКЦИЯ

Исполнительный директор

Владимир ПоложевецОтветственный секретарь

Наталья Хвостова[email protected]Технический редактор

Владимир ЛукинРедакторы

Андрей БешковАлексей БарабановМихаил Платов

РЕКЛАМНАЯ СЛУЖБА

тел./факс: (095) 928-8253Константин Меделянreс[email protected]

Верстка и оформление

[email protected]Дизайн обложки

Николай Петрочук

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

обращайтесь по телефону:(095) 928-8253 (доб. 120)

107045, г. Москва,Ананьевский переулок, дом 4/2 стр. 1тел./факс: (095) 928-8253Сайт журнала: www.samag.ru

РУКОВОДИТЕЛЬ ПРОЕКТА

Петр ПоложевецУЧРЕДИТЕЛИ

Владимир ПоложевецАлександр МихалевИЗДАТЕЛЬ

ЗАО «Издательский дом«Учительская газета»

Отпечатано типографией

ГП «Московская Типография №13»Тираж 8400 экз.

Журнал зарегистрированв Министерстве РФ по делам печати, телерадиовещания и средств массо-вых коммуникаций (свидетельствоПИ № 77-12542 от 24 апреля 2002 г.)

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

ЧИТАЙТЕВ СЛЕДУЮЩЕМНОМЕРЕ:

Уважаемые читатели!

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

Приобрести новые и старые номера журналавы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.

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

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

Asterisk и Linux:миссия IP-телефонияДействие 3Мы достаточно подробно изучили воз-можности Asterisk в сопряжении с го-родской телефонной сетью. Теперь, после того как в нашем распоряже-нии оказалась полноценная мини-АТС, самое время приступить к плановому улучшению ее возможностей. Начнем с вещей наиболее приятных – облегчим процесс администрирования.

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

некоторое количество серверов, на всех установлена AIDE, базу которой рекомендуется хранить на сменном но-сителе с целью не допустить попада-ния ее в чужие руки. Как реализовать это требование? Не вручную ведь ко-пировать базу с каждого сервера? Для автоматизации этой задачи и был раз-работан скрипт AIDEControl.

SAP + MySQL = MaxDBПри выборе СУБД для проекта перед нами часто встаёт проблема выбора между низкой (часто нулевой) стои-мостью открытых БД, таких как MySQL или PostgreSQL, и мощью и широтой возможностей «серьёзных» СУБД – Oracle, DB2, MSSQL. MaxDB от компа-нии MySQL AB, наследница SAP DB – прекрасная альтернатива такому вы-бору. Это промышленная, SAB-серти-фицированная база данных, распро-страняемая под лицензией GPL. Уста-новим MaxDB и познакомимся побли-же с возможностями, которые она пре-доставляет.

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