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

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

СЬ

ЛИ
ЛИ
ТЯ Е

Ж ПИ
ЗА ДНИ
НУ

РА КУ
ЛЫ ГО

ТИ РАС
КУ ВО

О
НИ НО

№7(32) ИЮЛЬ 2005

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

www.samag.ru

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

И
ЬГ
ЬД О
РА СКА
ТЕ
К

ИС НН
ЕН
УС

БО
НА ТПУ

ИЛ ДА
ТП

НЧ ЖИ
ВО

РА Е О

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

КО НЕО
АВ СЛ
Л

Л
ХА

ПО
УЕ

ЗА
Есть ли жизнь
без антивируса?
Так видит журнал читатель, оформивший подписку:
Запускаем spamd
на FreeBSD
Проверяем
HTTP-трафик на лету
Настраиваем WSUS
Устанавливаем связку
Postfix + Exchange
Удаленно управляем
BIOS Setup
ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Автоматизируем подключение
№7(32) июль 2005

баз 1С новой версии 8.0


Роспечать – 81655
Пресса России – 87836
Интер-почта – тел. (095) 500-00-60
оглавление
2 СОБЫТИЯ 48 Автоматизируем подключение
баз 1С новой версии 8.0
3 ТЕНДЕНЦИИ Рассматриваем новый механизм подключения баз 1C.
Иван Коробко
БЕЗОПАСНОСТЬ ikorobko@prosv.ru

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


Настраиваем антивирус-прокси на основе ClamAV и Windows Server Update Services
HTTP AntiVirus Proxy. Андрей Маркелов Служба WSUS облегчит отслеживание выхода новых
andrew@markelov.net версий программ, позволит своевременно устанавливать
обновления, и, как следствие, повысит уровень безопас-
6 DansGuardian + ClamAV ности информационной системы вашей компании.
Фильтруем веб-содержимое и строим антивирусную Сергей Сергеев
защиту. Андрей Авраменко sergs13@yandex.ru
liksx@mail.ru
60 Open-Xchange – свободу группам!
9 Проактивные системы защиты, Появилась альтернатива MS Exchange и Lotus Notes – те-
или Есть ли жизнь без антивируса? перь нам доступна свободная версия Novell/SUSE Linux
Обзор приложений, способных конкурировать с анти- Open-Xchange сервера. Павел Лебедев
вирусами. Сергей Яремчук lebedev.pavel@gmail.com
grinder@ua.fm
HARDWARE
14 Запускаем spamd на FreeBSD
Тонкости настройки программы для эффективного бло- 66 LinuxBIOS – фундамент для Linux?
кирования спама. Сергей Супрунов Спроектированная для работы в многоузловых клас-
amsand@rambler.ru терных системах, технология LinuxBIOS сегодня может
быть использована не только в серверах, но и в рабо-
20 Развертываем Heimdal Kerberos чих станциях. Так что же это – еще один BIOS или что-
Инфраструктура Kerberos в локальной сети. то большее? Антон Борисов
Михаил Кондрин a.borisov@tesv.tmb.ru
mkondrin@hppi.troitsk.ru
70 Удаленно управляем BIOS Setup
26 Настраиваем Kerberos поверх LDAP... Каждый из вас сталкивался с необходимостью войти
… и получаем однородную информационную среду для в BIOS Setup и слегка его «подкрутить» или починить
аутентификации и авторизации пользователей в Linux. «рухнувшую» Windows NT, Linux/FreeBSD. Традиционно
Алексей Барабанов эта задача решается при помощи мыши и клавиатуры,
alekseybb@mail.ru но что делать, если сервер физически недоступен?
Крис Касперски
АДМИНИСТРИРОВАНИЕ kk@sendmail.ru

32 Asterisk и Linux: миссия IP-телефония ПРОГРАММИРОВАНИЕ


Действие 2
Как подключить Asterisk к обычной телефонной сети. 76 Разрабатываем информационные
Михаил Платов системы на PHP методом визуального
platov@cs.vsu.ru программирования
Если вы часто создаете веб-приложения на языке
39 FreeBSD tips: работаем с TFTP PHP, вам пригодится инструмент, позволяющий стро-
Для некоторых задач возможности протокола FTP ока- ить PHP-код информационных систем в автоматичес-
зываются избыточными. Чтобы не тратить ресурсы на ком режиме. Евгений Воякин
их поддержку, воспользуемся TFTP. evgy@mail.ru
Сергей Супрунов
amsand@rambler.ru WEB
42 Устанавливаем связку Postfix + Exchange 82 История развития сайтостроения
Как организовать внутрикорпоративный документообо- Оценим текущее состояние WWW и определим его бу-
рот на базе MS Exchange, оставив пользователям воз- дущее развитие. Алексей Моисеев
можность общаться по электронной почте с внешним tsaralex@alpe.ru
миром, и при этом не уменьшить уровень внутренней
безопасности? Владимир Агапов 86 Кто, куда, зачем пришел,
onix@deepnet.ru или Анализируем логи веб-сервера
На каждом веб-сайте работает счетчик посещений. И
46 Автоматизация MS Windows, или AutoIt это неудивительно: всем нам интересно, а кому-то еще
как мечта эникейщика. и важно для бизнеса, сколько раз пользователи все-
Часть 4 мирной паутины посещали наш сайт.
Диск с автоматически установленной ОС Windows го- Денис Городецкий
тов. Теперь и рядовой сотрудник компании сможет уста- denik27@nm.ru
новить новую и переустановить поврежденную станцию
без локального участия системного администратора. 93 КНИЖНАЯ ПОЛКА
Алексей Барабанов
alekseybb@mail.ru 59, 94 BUGTRAQ

№7, июль 2005 1


события
15-17 сентября зователей и миграции с Windows. Помимо этого будет про-
ведена конференция по вопросам использования Linux в
Open Source Forum’2005, п. Архыз бизнесе, образовании и обеспечении информационной бе-
Некоммерческая общественная организация «ITX commu- зопасности. Организаторами конференции являются пор-
nity» совместно с Северо-Кавказской группой пользовате- тал Линуксцентр и компания Linux INK.
лей Linux «NC LUG» приглашают вас принять участие во Помимо собственного сектора выставки Linux будет ак-
втором Международном форуме «Open Source Forum’05», тивно использоваться и в традиционных для SofTool облас-
намеченном на 15-17 сентября 2005 года в посёлке Архыз, тях. Участникам ежегодных Софтулийских игр будут пред-
пансионат компании «ЮгТехМонтаж». ложены задания по тематике Open Source, будут проведены
Цель форума: съезд IT- специалистов для обмена мне- Linux-конкурсы для школьников и студентов как наиболее
ниями, опытом в разработке решений на базе Open Source, активных и обучаемых членов компьютерного сообщества.
практикой внедрения. Посетители интернет-кафе смогут воспользоваться терми-
Все подробности предстоящего события, а также реги- налами с предустановленной ОС Linux.
страция слушателей и докладчиков на http://lug.kmv.ru/news. Более подробную информацию о LinuxLand можно по-
php?extend.465 и http://itx.ru/projects/osf/index.html. лучить на официальном сайте выставки по адресу: http:\\
www.linuxland.ru.
27 сентября – 1 октября
SofTool пройдет уже в 16-й раз 13-16 октября
Ежегодная выставка «СОФТУЛ», отметившая в прошлом ISDEF’2005: инвестиции в будущее
году свое 15-летие, будет проводиться в период с 27 сен- Открыта регистрация на четвертую ежегодную междуна-
тября по 1 октября 2005 года в Москве, в 69-м павильо- родную конференцию ISDEF’2005. Одной из центральных
не ВВЦ. Выставка «СОФТУЛ» является самым крупным и тем для обсуждения в этом году станет развитие софтвер-
представительным российским форумом новейших разра- ных компаний.
боток в области информационных технологий и их приме- Ассоциация ISDEF («Форум независимых разработчи-
нения в экономике страны. В этом году в выставке примут ков программного обеспечения») объявляет о начале ре-
участие более 300 компаний и ожидается свыше 60 000 гистрации участников четвертой международной конфе-
посетителей. ренции ISDEF’2005, которая пройдет в гостинице «Holiday
Трудно переоценить значение этой выставки для раз- Inn» (п. Виноградово, 4 км от МКАД по Дмитровскому шос-
вития российской компьютерной индустрии. Председа- се) с 13 по 16 октября 2005 года.
телем оргкомитета выставки является член президиума Международная конференция ISDEF – это знаковое ме-
Российской академии наук, академик, директор ИРЭ РАН роприятие не только для российского, но и мирового IT-рын-
Ю.В. Гуляев, а в числе участников фигурируют такие из- ка. Ежегодно ISDEF собирает все большее количество по-
вестные компании, как 1С, ABBYY Software House, Галак- сетителей со всего мира. В прошлом году ISDEF’2004 со-
тика, ГАРАНТ, Консультант Плюс, Лаборатория Касперско- брал около 500 участников, среди которых не только разра-
го, ПРОМТ, РЕЛЭКС, Intel, Microsoft и другие. ботчики и производители программного обеспечения, но и
В рамках выставки также проходит 6-я Всероссийская журналисты, крупнейшие дистрибьюторы и паблишеры ПО,
конференция «Информационные технологии в России». представители инвестиционных и юридических компаний,
Конференция включает несколько разделов по ключевым государственных организаций и финансовых структур.
направлениям развития IT: Управление, Информационная В этом году самыми насыщенными и объемными (как
безопасность, ИТ в образовании. по количеству участников, так и продолжительности) ста-
Выставка в этом году включает в себя 5 расширенных нут секции, посвященные развитию компаний. Выбор те-
экспозиций со своими секциями конференции: Документо- мы обусловлен в первую очередь новым этапом становле-
оборот (DOCFLOW), LinuxLand, АСУТП’Экспо, САПР’Экспо, ния российских компаний-производителей ПО, работаю-
ИТ в медицине и фармации. щих как на отечественный, так и западный рынок. От ста-
дии становления российские софтверные компании пере-
Выставка LinuxLand на SofTool’2005 ходят к этапу бурного роста, сталкиваясь с необходимос-
В этом году впервые в истории выставки под ее эгидой бу- тью грамотно решать проблемы по эффективному управ-
дет проводиться специализированная секция – LinuxLand, лению, продвижению продуктов на международный рынок,
предназначенная для компаний, работающих в области привлечению инвестиций и их оптимальному использова-
Open Source. нию. Обсуждению этих вопросов будет посвящены все три
Ее организатором выступит портал Линуксцентр (httt:\\ дня конференции. Также пройдут уже ставшие традицион-
www.linuxcenter.ru). На LinuxLand планируется собрать все ными тематические секции по юриспруденции, маркетингу
Linux-компании в одном секторе выставочной площади, вы- и игровому рынку ПО.
деляющемся среди остальных стендов особой застройкой, Без всякого сомнения, участие в конференции
приподнятым подиумным полом и освещением. В рамках ISDEF’2005 станет самой важной инвестицией в будущее
LinuxLand будет организована Демо-Зона, где посетители для многих софверных компаний.
выставки смогут непосредственно познакомиться с предла- Для участия в конференции вам необходимо зареги-
гаемыми решениями для корпоративных, домашних поль- стрироваться на сайте: www.isdef.org.

2
тенденции
Mozilla Suite будет жить сменить номер будущего major-релиза – им станет 1.5, а не
Новый учрежденный проект SeaMonkey Project продолжит ожидавшийся ранее 1.1. Данные преобразования связаны с
совершенствование набора открытых продуктов Mozilla желанием разработчиков отразить значимость и число нов-
Suite. Результаты работы SeaMonkey не станут официаль- шеств, которые появятся в Firefox 1.5. По ориентировочному
ным обновлением к Mozilla Suite от Mozilla Foundation, одна- плану выхода Firefox 1.5 «Deer Park», его бета-версия (1.4)
ко организация будет взаимодействовать с группой разра- выйдет в августе 2005 года, а сам стабильный релиз 1.5 –
ботчиков, предоставит им всю необходимую инфраструкту- в сентябре этого же года. Среди изменений отмечается но-
ру, а улучшения, проводимые в SeaMonkey, будут возвра- вый движок Gecko, совместимость с HIG, новая система об-
щаться в кодовую базу Mozilla, откуда затем уже попадать в новлений, улучшения в менеджере расширений.
другие продукты Mozilla (Firefox и Thunderbird). Первые рели-
зы SeaMonkey должны появиться в ближайшее время, и со- Проект корпоративного дистрибутива
общается, что пользователи Mozilla 1.7.x и Mozilla 1.8 Alpha/ Linux на базе Debian
Beta смогут найти в них множество улучшений. Появились первые известия и подробности о проекте соз-
дания корпоративного дистрибутива на базе Debian GNU/
Проблемы в безопасности Debian Linux. Среди компаний, подтвердивших свое участие в раз-
Как стало известно от Мартина Шульца, после выпуска Debi- работке новой системы отмечаются: credativ GmbH, Knop-
an GNU/Linux 3.1 (Sarge) в инфраструктуре обеспечения бе- pix, LinEx, Linspire, MEPIS, Progeny, Skolelinux, Sun Wah Linux,
зопасности возникли некоторые проблемы, из-за которых UserLinux, VA Linux Japan, Xandros. Союз получил название
команда Debian Security Team не могла выпускать обнов- DCC (Debian Core Consortium), а в качестве руководителя и
ления к уязвимым пакетам. Майкл Стоун в свою очередь главного инициатора – Progeny Linux Systems Inc., исполни-
жаловался на нехватку людских ресурсов для своевремен- тельным директором которой является основатель Debian
ного создания необходимых патчей. Однако уже в скором Ян Мердок. Стандартными для дистрибутива станут пакеты
времени все проблемы были полностью решены, и с пер- формата DEB, но обещается и совместимость с RPM. Си-
вой половины июля инфраструктура обеспечения безопас- стема будет соответствовать стандарту LSB (Linux Standard
ности для двух последних стабильных релизов дистрибути- Base) 2, положит основу для будущих релизов собственных
ва Debian GNU/Linux (3.1 «Sarge» и 3.0 «Woody») вновь пол- дистрибутивов компаний-участников.
ностью функционирует, патчи ко всем пакетам предостав-
ляются в обычном режиме. Составил Дмитрий Шурупов
по материалам www.nixp.ru
Вена начинает переход на 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 и решила

№7, июль 2005 3


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

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

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


атрибут грамотно спланированной IT-стратегии
организации. Для не обремененного лишними
деньгами бюджета IT-отдела закупка
и установка на всех пользовательских
компьютерах антивирусных программ может
стать вполне весомой статьей расходов.
АНДРЕЙ МАРКЕЛОВ Можно ли как-то
как-то избежать лишних
лишних затрат
затрат??

П
редставим, что у пользователей отсутствуют или от- Предполагается, что у вас уже имеется настроенный
ключены НГМД (про CD-ROM и USB я даже не упо- прокси-сервер, например Squid. На момент написания ста-
минаю – на мой взгляд, это непозволительная ро- тьи последней версией HAVP была 0.62. Установка произ-
скошь для клиентских рабочих мест). Почта уже проверя- водилась на Red Hat Linux Enterprise 4, но без проблем все
ется каким-нибудь открытым антивирусом типа Clamav. В должно работать и на других UNIX-системах.
таком случае единственным возможным источником виру-
сов может являться «дикий Интернет». И если доступ поль- Устанавливаем HAVP
зователям открыт только через протокол HTTP, то только Для начала создадим отдельную ФС для временных фай-
его нам и остается сканировать на предмет вирусов. Делать лов HAVP. Отдельную – потому что ее необходимо монти-
это удобнее и дешевле на сервере при помощи открытого ровать с поддержкой так называемых «ручных блокиро-
ПО, чем мы и займемся. вок» для файлов (mandatory locks).
Для проверки наличия вирусов традиционно предла- Это делается при помощи опции mand, команды mount.
гаю использовать наиболее распространенный из свобод- Я предпочел для ускорения работы и снижения нагруз-
ных антивирусов – Clam AntiVirus (http://www.clamav.net). Я ки на дисковый массив создать такую файловую систе-
не буду подробно рассказывать о его преимуществах и осо- му в ОЗУ:
бенностях, о которых уже написано в статьях [1, 2, 3]. Се-
годня мы разберем практические вопросы установки и ин- # mkdir /var/tmp/havp
# chown nobody /var/tmp/havp
теграции антивируса с прокси-сервером. В качестве прок- # chgrp nobody /var/tmp/havp
си мы возьмем HTTP AntiVirus proxy (HAVP) [4]. # mount -t tmpfs -o size=100M,mand tmpfs /var/tmp/havp
Помимо HAVP также рассматривались и другие вари-
анты. Но они либо на платной основе в случае коммерче- Соответствующая строчка, которую необходимо до-
ского применения как dansguardian.org (plug-in к нему), ли- бавить в /etc/fstab для автоматического создания файло-
бо показались менее стабильными, по отзывам в форумах. вой системы во время загрузки, выглядит следующим об-
Наверняка это не единственное, и, возможно, не самое разом:
лучшее решение, но тем не менее оно существует и впол-
не справляется с поставленными задачами. С возможны- # <fs> <mt _ point> <type> <options> ↵
<dump> <pass>
ми альтернативными вариантами вы можете ознакомить- tmpfs /var/tmp/havp tmpfs auto,size=100M,mand ↵
ся по ссылке [5]. 0 0
HTTP AntiVirus proxy – это прокси-сервер с фильтром –
антивирусом. Сканируется весь трафик, и проверка на ви- Проверяем, как смонтировалась наша файловая систе-
русы является единственной задачей данного прокси-серве- ма. Мы должны получить что-нибудь похожее на:
ра. Поэтому вполне разумным было бы использовать HAVP
в связке с кэширующим прокси, умеющим фильтровать тра- # df –h /var/tmp/havp
фик, например Squid. Ключевыми особенностями HAVP яв- tmpfs 100M 0 100M 0% /var/tmp/havp
ляются возможность непрерывной проверки трафика без
тайм-аутов и блокировок, а также корректная работа с ди- Кроме того, создадим директорию для лог-файлов прок-
намическими и защищенными паролем страницами. си-сервера и выставим владельца:

4
безопасность
# mkdir /var/log/havp StreamSaveToDisk
# chown nobody /var/log/havp
# chgrp nobody /var/log/havp
и удаляем строчку:
Теперь развернем предварительно скачанный со стра-
нички [4] исходные коды прокси-сервера. Example

# tar zxvf havp-0.62.tar.gz Наконец, запускаем демон командой:

Далее, заходим в директорию havp-0.62 и начинаем пра- # /usr/local/sbin/clamd


вить файл havp/default.h. Изменить требуется следующее:
Теперь пробуем проверить наше свежеустановлен-
#deÞne GROUP "nobody" ное решение. После того как в настройках браузера ука-
// В дополнение к пользователю, из-под которого будет
// запускаться служба, меняем на nobody и группу жете порт, назначенный HAVP, и IP-адрес прокси, по ссыл-
#deÞne PARENTPROXY "localhost" ке [7] можно попробовать скачать тестовую сигнатуру ви-
#deÞne PARENTPORT 3128
// Указываем хост и порт, на котором установлен кэширующий руса. Что должно получиться при этой попытке, вы види-
// прокси-сервер, например Squid. Если «родительского» те на рис. 1, 2.
// прокси у вас нет, то комментируем
#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

Сервис запускается командой /usr/local/bin/havp. Сле-


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

Устанавливаем Clamav
Про установку антивируса Clamav читайте в [1, 2, 3]. Здесь
же я приведу минимально необходимые для установки све-
дения. Добавляем группу и пользователя, из-под которого Рисунок 2. Сработала защита
будет запускаться демон: Не забудьте запретить пользователям подключаться
напрямую к Squid. Если все получилось, то я могу вас по-
# groupadd clamav здравить с очередным успешным шагом в создании защи-
# useradd -g clamav -s /bin/false clamav
щенной локальной сети.
Скачиваем с сайта проекта [6] последнюю версию ис-
ходников, разархивируем и правим в clamav-config.h пере- Литература, ссылки:
менную SCANBUFF. Ее значение должно быть меньше, чем 1. Маркелов А. Броня моллюска. Обзор и установка анти-
указанное в переменной MAXRECV файла havp/default.h. вируса ClamAV. – Журнал «Компьютерра» №21, 2004 г. –
После чего выполняем привычные: 34-35 с. Статья доступна в Интернете по адресу: http://
www.markelov.net/articles.php?lng=ru&pg=44.
# ./conÞgure 2. Яремчук С. Свободный антивирус. – Журнал «Систем-
# make
# make install ный администратор», №8, 2004 г. – 24-25 с.
3. Супрунов С. Еще раз о ClamAV: особенности установ-
Добавляем в crontab строчку, запускающую команду по ки в FreeBSD. – Журнал «Системный администратор»,
обновлению антивирусных баз: №3, 2004 г. – 32-37 с.
4. HAVP – http://www.server-side.de.
1 * * * * /usr/local/bin/freshclam -quiet 5. Методы проверки HTTP-трафика при помощи Clamav –
http://www.clamav.net/3rdparty.html#webftp.
Правим файл /usr/local/etc/clamav.conf. Добавляем: 6. http://www.clamav.net.
7. Тестовая сигнатура вируса – http://www.eicar.org/anti_vi-
LocalSocket /var/run/clamd.sock rus_test_file.htm.

№7, июль 2005 5


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

Dans
ansG
Guardian + C
Clam
lamAV:
AV:
ФИЛЬТРУЕМ ВЕБ-СОДЕРЖИМОЕ
И СТРОИМ АНТИВИРУСНУЮ ЗАЩИТУ

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

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


Для ее обеспечения, по данным исследования IDC, российские пользователи затратили почти
42$ млн. на специализированное программное обеспечение. Но существуют и бесплатные
продукты, не уступающие коммерческим по функциональности.

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

6
безопасность
DansGuardian – фильтр веб-содержимого для ОС Linux, --runas _ grp=squid
FreeBSD, OpenBSD, NetBSD, Mac OS X, HP-UX и Solaris, ис- make
пользует прокси-серверы squid или oops. Он фильтрует со- make instal
держимое несколькими методами: по фразам, картинкам
и URL. В отличие от некоторых других фильтров, он не ис- Далее следует настроить dansguardian. Конфигураци-
пользует «черный лист» URL, который надо постоянно об- онный файл /etc/dansguardian/dansguardian.conf оснащен
новлять (да и к тому же Интернет большой, все не пере- отличными комментариями, так что, я думаю, не будет за-
числишь). труднений в конфигурировании:
Проект постоянно дорабатывается, имеется коммерчес-
кая версия под названием SmoothGuardian. В ней есть не- reportinglevel = 3
languagedir = '/etc/dansguardian/languages'
сколько дополнительных возможностей: блокировка лицен- # К сожалению, русского языка в списке нет. Я сделал
зионной музыки, удаление рекламы, многоязыковая под- # перевод и в ближайшее время отправлю автору. Вы можете
# скачать архив с сайта журнала http://www.samag.ru,
держка фраз фильтрования, генерация стандартных отче- # раздел «Исходный код». Чтобы установить язык, необходимо
тов, таких как самые популярные сайты, пользователи и # разархивировать файл в папку /etc/dansguardian/languages
# и в конфигурационном файле указать:
сайты, заблокированные чаще всего, позволяет блокиро- language = 'russian'
вать «по часам», т.е. блокировка происходит в определен-
# Что записывать в лог
ное время, и другое. # 0 = none 1 = just denied 2 = all text based
Я буду использовать именно бесплатную версию, так как # 3 = all requests
loglevel = 2
ее конфигурирование считается более сложным. # Протоколировать, если страница была передана пользователю
Я устанавливал dansguardian на ОС Linux Alt Mas- logexceptionhits = on
ter 2.4: # формат ведения лога
! Версия dansguardian – 2.8.0.3 (версия антивирусного # 1 = DansGuardian format
# 3 = Squid Log File Format
2 = CSV-style format
4 = Tab delimited
патча 6.3.8). logÞleformat = 1
! Версия squid – 2.5.STABLE9. # Местонахождение лог-файла
! Версия clamav – 0.86.1. loglocation = '/var/log/dansguardian/access.log'
! Версия libesmtp – 1.0.3r1.
# Сетевые опции
Dansguardian не является редиректором (как, напри- # IP-адрес, на котором слушает dansguardian
Þlterip =
мер, squidGuard), хотя многие первоначально думают имен- Þlterport = 8080
но так. Это прокси-сервер, и он использует squid как веб-
# IP-адрес и порт прокси-сервера (squid или oops)
браузер. Для того чтобы пользователи не использовали proxyip = 127.0.0.1
squid напрямую, необходимо в конфигурационном фай- proxyport = 3128
ле firewall указать перенаправление с порта squid на порт # URL, на который произойдет переадресация при блокировке
dansguardian. Либо установить dansguardian на порт 3128, accessdeniedaddress = ↵
'http://YOURSERVER.YOURDOMAIN/cgi-bin/dansguardian.pl'
а squid перенести на какой-либо другой, открыв доступ nonstandarddelimiter = on
только с 127.0.0.1
# Заменять запрещенную картинку какой-нибудь своей
Для начала установим СlamAV. Скачать его можно с usecustombannedimage = 1
официального сайта http://www.clamav.net. custombannedimageÞle = '/etc/dansguardian/transparent1x1.gif'

# Создать фильтр для группы пользователей.


./conÞgure # Dansguardian будет автоматически смотреть в файл
make # dansguardianfN.conf, где N – номер группы
make install Þltergroups = 1
# Чтобы поставить пользователей в соответствие с группами,
# отредактируйте файл Þltergrouplist
Конфигурирование clamav не займет много времени. Þltergroupslist = '/etc/dansguardian/Þltergroupslistv
Просто немного подредактируйте clamd.conf. # Местоположение файлов аутентификации
bannediplist = '/etc/dansguardian/bannediplist'
Dansguardian требует библиотеку libesmtp для отправки exceptioniplist = '/etc/dansguardian/exceptioniplist'
сообщений системному администратору. Скачать ее мож- banneduserlist = '/etc/dansguardian/banneduserlist'
exceptionuserlist = '/etc/dansguardian/exceptionuserlist'
но с http://www.stafford.uklinux.net/libesmtp.
Устанавливается просто: # Записывать в лог найденные причины блокировки.
showweightedfound = on
./conÞgure –-preÞx=/usr # 0 = off – не использовать
make # 1 = on, normal – использовать в стандартном режиме
make install # 2 = on, singular – записывать каждый аргумент,
# но только один раз для страницы
weightedphrasemode = 2
Пропатчивать dansguardian для поддержки firewall не urlcachenumber = 2000
нужно, скачать его с поддержкой антивируса можно с http:// urlcacheage = 900
www.harvest.com.br/asp/afn/dg.nsf. # Фильтрация содержимого по фразам
# 0 – фильтрация html вместе с мета-тэгами
# 1 - удаление многочисленных пробелов и html-тэгов
./conÞgure # перед фильтрацией
--sysconfdir=/etc/dansguardian/ # 2 – оба метода
--cgidir=/var/www/cgi-bin/ phraseÞltermode = 2
--runas _ usr=squid preservecase = 0

№7, июль 2005 7


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

reverseaddresslookups = off # Настройки CLAMDSCAN


reverseclientiplookups = off # --------------------
# Сокет демона clamd (указывается в clamd.conf)
# Создавать файлы bannedsitelist и bannedurllist localsocket = '/tmp/clamd'
# со списком запрещенных сайтов и URL
createlistcacheÞles = on
# Настройки CLAMAV
# Максимальный размер передаваемого от клиента файла # --------------------
# в байтах clmaxÞles = 1500
# 0 – блокировать clmaxreclevel = 3
# -1 – не блокировать clmaxÞlesize = 10485760
# или размер файла
maxuploadsize = -1 Конфигурационный файл squid менять не будем. Будем
maxcontentÞltersize = 256
# Методы аутентификации пользователя на прокси-сервере считать, что squid настроен и нормально функционирует, за
usernameidmethodproxyauth = on исключением того случая, если вы хотите установить Dan-
# **На данный момент не работает**
usernameidmethodntlm = off sguardian на порт 3128. Тогда необходимо изменить порт в
usernameidmethodident = off конфигурационном файле squid.
preemptivebanning = on
# Добавлять заголовки X-Forwarded-For: <IP-адрес клиента> Теперь необходимо настроить firewall на перенаправле-
forwardedfor = off ние. В Linux это делается примерно так:
usexforwardedfor = off
logconnectionhandlingerrors = on
iptables -t nat -A PREROUTING --dst x.x.x.x -p tcp ↵
# Опции дочерних процессов --dport 3128 -j DNAT --to-destination x.x.x.x:8080
# Максимальное количество процессов
maxchildren = 120 x.x.x.x поменяйте на IP интерфейса, который смотрит в сто-
# Первоначальное количество процессов
minchildren = 8 рону локальной сети.
# Количество процессов, которые должны быть готовы Ну вот и все. Теперь при скачивании файла, содержаще-
# к соединению
minsparechildren = 4 го вирус, у вас в этом файле появится сообщение о вирусе.
preforkchildren = 6 Конечно, не очень удобно, но зато безопасно. Лучшим вари-
# Максимальное количество бездействующих процессов
maxsparechildren = 32 антом теперь, наверное, будет не сохранять файлы на диск,
# Максимальное количество сайтов, обработанных процессом а сразу открывать, тогда не будет недоразумений.
maxagechildren = 500
К недостаткам dansguardian относится отсутствие ру-
# Опции коммуникации между процессами
сификации, т.е. происходит фильтрация по английским
ipcÞlename = '/tmp/.dguardianipc' фразам (придется самим придумывать фразы для филь-
urlipcÞlename = '/tmp/.dguardianurlipc' тра). При проверке больших файлов также придется по-
# PID Þlename дождать. Dansguardian использует больше ресурсов сер-
pidÞlename = '/var/run/dansguardian.pid' вера, по сравнению с редиректорами, что тоже нельзя от-
nodaemon = off
nologger = off нести к плюсам.
# Пользователь и группа, с чьими правами запускается В заключение хотел бы сказать, что необходимо от-
# dansguardian
daemonuser = 'squid' редактировать файлы, находящиеся в каталоге /etc/
daemongroup = 'squid' dansguardian, на которые есть ссылки из основного конфигу-
softrestart = off
рационного файла, так как при тестировании, например, вы-
# Антивирусные настройки яснилось, что по умолчанию он блокирует zip-архивы. Про-
# --------------------
# Включить проверку на вирусы грамма должна быть настроена под политику безопасности
virusscan = on организации, то есть если организация позволяет скачивать
# Способ проверки clamdscan, clamav или kav
virusengine = 'clamav' музыку, то какой смысл блокировать mp3-файлы.
# Максимальное количество информации, переданной клиенту, В целом у меня о программе сложилось хорошее впе-
# если файл содержит вирус
tricklelength = 32768 чатление. Простая в установке, несложная в настройке,
Þrsttrickledelay = 30 она имеет достаточно обширные возможности. Хотелось
followingtrickledelay = 60
# Список типов MIME, не проверяемых на вирусы бы, чтобы данный проект и дальше развивался, позволяя
exceptionvirusmimetypelist = ↵ системным администраторам защищать локальную сеть от
'/etc/dansguardian/exceptionvirusmimetypelist'
# Максимальный размер содержимого для проверки, нежелательных данных.
# если 0 – не ограничено
maxcontentscansize = 0
# Файлы с определенными расширениями не будут проверяться Ссылки:
exceptionvirusextensionlist = ↵ 1. Введение в dansguardian и руководство по детальной
'/etc/dansguardian/exceptionvirusextensionlist'
# Временная директория, в которую сохраняется файл инсталляции dansguardian: www.dansguardian.org.
# для проверки 2. Информация о продукте SmoothGuardian: www.smooth-
downloaddir = '/tmp/dgvirus'
# В директории /etc/dansguardian содержатся несколько wall.net.

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

ПРОАКТИВНЫЕ СИСТЕМЫ ЗАЩИТЫ,


ИЛИ ЕСТЬ ЛИ ЖИЗНЬ БЕЗ АНТИВИРУСА?

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

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


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

О
тношения пользователей по от- собный вариант вируса. Система об- ют систему. В последнее время ста-
ношению к антивирусам варьи- наружения, основанная на опыте пре- ло заметно оживление и среди раз-
руется от полной уверенности дыдущих атак, становится бесполез- работчиков систем безопасности для
в защите до осознания того, что глав- ной при столкновении с неизвестным ОС Windows.
ное – выдержать первый удар. Дейс- вирусом или шпионской программой. Прежде чем приступить к конкрет-
твительно антивирусы сегодня несут Для того чтобы сгенерировать сигна- ным решениям, хотелось бы пару слов
уже не столько защитную функцию, туру, антивирусной компании необхо- сказать об проблемах. Первое и самое
а скорее используются как средство димо получить экземпляр вируса, вы- трудное, что придется сделать – это
оценки нанесенного ущерба и удале- делить специфический только для него убедить самого себя в том, что такая
ния заразы. Антивирусные компании, фрагмент, и только после этого он бу- утилита способна защитить компьютер
полностью осознавая то, что вирус – дет занесен в базу. На все это уходит или хотя бы отреагировать. В течение
это некий алгоритм, включающий не некоторое время (а вслучае полимор- двух лет мой подопытный компьютер
только программу со всеми команда- фного вируса процесс создания сигна- защищался одним из бесплатных ан-
ми, но и определенные действия, при- туры может еще более затянуться), в тивирусов, как правило, с базами по-
водящие к поражению данных, упорно течение которого антивирусы не спо- лугодичной давности, межсетевым эк-
продолжают идти наиболее простым собны, противостоять новому врагу, раном и одной из программ, описанных
путем. И мы до сих пор пользуемся ан- но вполне достаточному, чтобы новый ниже. За это время система подверга-
тивирусами, которые просто сравнива- червь заразил сотни тысяч компьюте- лась (и постоянно подвергается) мно-
ют набор знаков, взятых из антивирус- ров. Классические сигнатурные анти- гочисленным атакам, но заражения так
ных баз, с другим (файлом пользовате- вирусы оказываются не способны пре- и не произошло.
ля или оперативной памятью). дотвратить глобальные эпидемии. Вполне возможно, что просто по-
В итоге традиционные антивирус- С другой стороны, наблюдение за везло, а может, пора действительно пе-
ные решения фактически оказались работой системы либо за основными ресмотреть взгляды. Но вся загвоздка
не способны в одиночку противостоять файлами позволяет определить не- в том, что утилиты требуют от пользо-
качественному разнообразию сущест- приятности и предотвратить нападе- вателя определенных знаний и неко-
вующих угроз. На одном из курсов, для ние, такие системы принято относить торого понимания происходящего в
того чтобы убедить скептиков, я распа- к классу систем предотвращения про- системе. Появление нового процесса
ковал вирус MyDoom, до этого благопо- никновения (Intrusion prevention sys- должно насторожить пользователя, он
лучно распознаваемый антивирусами tems) и проактивным системам защи- должен как минимум прочитать преду-
с обновленными базами, а затем за- ты. В мире Linux давно известны та- преждающее сообщение и затем при-
паковал уже другим упаковщиком. Ан- кие проекты, как LIDS, RSBAC, grsecu- нять верное решение. Щелчок по кноп-
тивирусы оказались не способны най- rity, tripwire и другие которые при пра- ке без раздумий может привести к за-
ти модернизированный, но работоспо- вильной настройке надежно защища- ражению. Хотя стоит отметить, что в

№7, июль 2005 9


безопасность
последнее время такие программы, за-
дают уже меньше вопросов, самостоя-
тельно принимая решение.
Далее, если утилиты отреагиру-
ют на новый процесс, вызванный ата-
кой червя, то, вполне возможно, смо-
гут проспать макровирус, если он бу-
дет заражать только файл шаблонов
или рабочий документ без создания
новых файлов и процессов. Но в боль-
шинстве своем они реагируют на воз-
никшую проблему. Естественно, луч-
ше всего подобные программы уста-
навливать на «чистую» систему, так
легче будет контролировать добавле-
ние программ в «белый» список. Плюс
ко всему поведенческие программы не
всегда могут остановить проникнове-
ние, и для того чтобы вылечить или Рисунок 1. Основное окно WinPatrol
найти зараженные файлы, все равно
необходимо использовать антивирус, жения, остановить или вообще only», убрав таким образом систем-
поэтому такие средства следует отно- удалить из автозапуска ненуж- ные.
сить скорее к вспомогательным (под- ные, получить информацию о каж- ! View Active Tasks – получение ин-
страховочным), основной их задачей дом (имя, версия программы, ключ формации о запущенных на дан-
остается недопущение эпидемий, пос- реестра и пр.) или нажатием кноп- ный момент программах и зада-
кольку они могут блокировать массо- ки «Full Report» получить отчет о чах, уничтожение и приостановка
вые заражения. Для основной защи- всех программах за один раз. При ненужных и подозрительных. Так-
ты по-прежнему необходимо исполь- первом запуске Scotty просматри- же при помощи этого пункта можно
зовать связку – межсетевой экран + вает список автоматически запу- разобраться в работе запущенной
антивирус. скающихся программ и при его из- системы, т.е. узнать, для чего пред-
менении предупреждает об этом назначена та или иная программа.
Часовой по имени Scotty пользователя. ! Cookies – информирование о появ-
Начну с программы, которой поль- ! IE Helpers – контроль за Browser лении новых Cookies, отклонение,
зуюсь уже более двух лет. WinPatrol Helper Objects, т.е. информация об управление и просмотр информа-
(http://www.winpatrol.com) текущая вер- имеющихся объектах, запрос на ции записанной в Cookies для при-
сия 9.1, статус freeware, поддерживают- установку новых объектов, удале- нятия решения. Можно также со-
ся Windows 95, 98, ME, 2000, NT и XP, ние подозрительных объектов. На- ставить правило фильтрования
размер – 0.98 Кб. до сказать, что Browser Helper Ob- для Cookies, которые всегда долж-
WinPatrol делает снимок критиче- jects запускаются каждый раз вме- ны удаляться (Cookies with Nuts).
ских системных ресурсов и предупреж- сте с Internet Explorer (который ста- ! Options – установка опций самой
дает в случае любых изменений. По- раниями Microsoft является неотде- программы. Здесь же устанавли-
сле запуска в трее возле часов появит- лимой частью систему), в том числе вается контроль за подменой до-
ся значок с изображением собаки, на- и при открытии папок на локальном машней страницы в веб-браузере,
званной Scotty the Windows Watch Dog. компьютере. Поэтому при их помо- реакция на изменение файла hosts
Вот теперь этот самый Scotty WWD без- щи можно без проблем следить за или его полная блокировка, выве-
устанно и будет следить за всем, что пользователем, что и применяется дение полного отчета по системе,
происходит на доверенном ему ком- в программах типа SpyWare. ведение истории изменений.
пьютере, «разнюхает» все о саморазм- ! Scheduled Task Monitoring – ото- ! File Types – позволяет просматри-
ножающиеся вирусах, Adware, Spy- бражение запланированных задач, вать, контролировать и восстанав-
ware, троянах, пробравшихся на ваш контроль над добавлением новых и ливать измененную ассоциацию
компьютер и, конечно, Cookies, кото- получение дополнительной инфор- приложений с расширениями фай-
рые будут поступать к вам постоянно. мации о планируемых работах лов.
Scotty позволяет подтверждать уста- ! Services – отключить или времен- ! PLUS – зарегистрировавшись, вы
новку любых новых программ на ком- но остановить запущенные серви- получаете доступ к сетевой базе
пьютере. Вызвав программу, получим сы и получение дополнительной ин- данных программ, цель которой по-
окно программы с несколькими вклад- формации о них. Чтобы не выиски- мочь пользователям разобраться в
ками (рис. 1): вать подозрительные программы в списке незнакомых названий, ведь
! Startup Programs – позволяет про- большом списке, можно включить надпись servise.exe в таблице про-
смотреть все запущенные прило- пункт «List non-Microsoft services цессов большинству ничего не ска-

10
безопасность
жет. На момент написания статьи вания. Новая разработка Safe’n’Sec, всех данных на компьютере пользова-
регистрация была бесплатной. представленная в ноябре прошло- теля осуществляется в соответствии с
го года, практически сразу получила политикой контроля активности, опре-
Менеджер процессов признание и была названа журналом деляющую, какие действия и их после-
AnVir Task Manager PC Magazine/RE антивирусом месяца. довательность нужно считать вредо-
Первое, что приходит в голову после При этом Safe’n’Sec не относится к ан- носными. На данный момент имеются
знакомства с менеджером процессов тивирусам, а принадлежит к классу три политики – жесткая, строгая и до-
AnVir Task Manager (http://anvir.com/an- систем проактивной защиты, которые верительная. После обнаружения по-
virrus.exe), что это не серьезно. Виной анализируют подозрительное поведе- дозрительного приложения Safe’n’Sec
является небольшой размер програм- ние пользователя или программы. Для самостоятельно принимает решение
мы, чуть меньше 380 Кб. А зря. Несмо- малых и средних предприятий, а также об его вредоносности и уведомляет
тря на такой маленький размер, про- индивидуального использования пред- пользователя, который должен опре-
грамма помогает: назначена версия Personal. В корпора- делить, что делать с таким приложе-
! получить полную информацию о за- тивной версии Safe’n’Sec Business име- нием (разрешить или заблокировать)
пущенных процессах (путь к файлу, ется административная консоль, ко- (рис. 4). Причем для упрощения приня-
описание, время работы, родитель- торая позволяет системному админи- тия решения доступна история актив-
ский процесс, командная строка, стратору дистанционно инсталлиро- ности, по которой он может подробно
использование процессора, памяти, вать и настраивать программу на ком- изучить последовательность действий,
список используемых dll, файлов, пьютерах пользователей. выполненных приложением. Дополни-
драйверов, потоков, окон и пр.); Версия 1.1, актуальная на момент тельно из консоли можно получить до-
! вылечить зараженный компьютер написания статьи, доступна в двух ва- ступ к списку запрещенных и доверен-
от вирусов, spyware и резидентных риантах – усеченная Safe’n’Sec ver. 1.1 ных приложений, который можно здесь
вирусов-троянов; и полная Safe’n’Sec ver. 1.1 + antivirus. же отредактировать. Для тестирования
! управлять приложениями, запуска- Последняя, как понятно из названия, работоспособности вместе с програм-
ющимися при старте Windows, с воз- включает возможность антивирусной мой поставляется утилита snstest.exe,
можностью отложенного (через 1 проверки. Основу продукта составля- которая имитирует занесение данных
минуту) запуска и блокировки до- ет модуль Intelligent activity control, поз- в системный реестр, попытку записи и
бавления новых программ (рис. 2). воляющий обнаруживать комбиниро- удаления из системного каталога.
ванные атаки, предотвратить попыт-
ки внести изменения в системный ре- Всесторонний контроль
естр или состояние сервисов операци- с RegRun
онной системы, открыть доступ к ре- RegRun Security Suite (http://www.grea-
гистрационным данным пользователя tis.com) работает со всеми версиями
и пр. При этом механизм принятия ре- Windows. Еще один комплект средств
шения Safe’n’Sec действует на основе для защиты компьютера против виру-
правил, учитывающих все возможные сов или троянцев, spyware и adware. Он
последовательности действий, класси- доступен в трех основных вариантах:
Рисунок 2. Предупреждающее сообщение фицируемых как вредоносные. Защита Standart (для обычных пользователей,
AnVir Task Manager

При помощи AnVir Task Manager


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

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

№7, июль 2005 11


безопасность
обеспечивает легкое управ- тор может быстро проверить
ление и безопасность), Pro- файлы, помещенные в авто-
fessional (имеет дополнитель- загрузку. Дополнительно де-
ные возможности по работе с тектор подстановки сравни-
системным реестром, позво- вает реальный путь к испол-
лят быстро оптимизировать няемому файлу с загружен-
системные параметры и обес- ным. Например, если процесс
печить надежную защиту), и с именем explorer.exe запуска-
самые большие возможнос- ется не из папки c:\windows\
ти имеет Gold, предназначен- system, а из другого места,
ная для профессионалов. По то пользователь будет опо-
ссылке http://www.greatis.com/ вещен. Трассировщик сис-
security/rus.exe доступен руси- темного реестра Registry Trac-
фикатор программы, к тому er, который имеется в верси-
же на сайте http://www.ruhelp. ях Professional или Gold, поз-
narod.ru имеется неофициаль- воляет указать список клю-
ный перевод файла помощи, чей реестра, при попытке из-
облегчающий знакомство с менения которых RegRun вы-
программой. даст предупреждающее со-
После запуска RegRun ак- общение.
тивизируется защита, опреде- Менеджер процессов поз-
ляемая уровнем безопаснос- Рисунок 4. Предупреждающее сообщение Safe’n’Sec воляет не только просмотреть
ти – от низкого до ультравы- новления они копируются в хранили- и при необходимости убить по-
сокого. В Центре Управления RegRun ще, которое находится в «Мои доку- дозрительный процесс, а также выдает
настраиваются параметры работы ос- менты\RegRun2». Правда, само хра- информацию по загруженным DLL и се-
новных модулей (рис. 5). Например, нилище почему-то программа никак не тевой активности приложений. Утили-
«WATCH DOG» обеспечивает контроль защищает и на подмену файлов никак та RunGuard, доступная в версии Gold,
за автозагрузкой в течение работы, не реагирует. проверяет файлы перед выполнением.
он может быть настроен на проверку При обнаружении модификации Контролируются файлы Microsoft Of-
конфигурации автозагрузки при стар- защищаемых файлов будет выведено fice (doc, dot, xls, xlt, ppt), html, Windows
те и выключении Windows либо через предупреждение, с указанием размера script (vbs, wsh, js, bat pif, cmd), hta и reg.
заданные промежутки времени. Если и даты создания обоих файлов. Теперь При появлении подозрительных запро-
при проверке обнаруживаются изме- этот файл можно копировать, переиме- сов они блокируются, и пользователь
нения, пользователь будет извещен новать, удалить, открыть или проска- может проанализировать содержание
об этом, и дополнительно запустится нировать антивирусной программой. файла, проверить его антивирусом, за-
утилита Start Control, при помощи ко- Для поиска вирусов, не известных ан- блокировать или разрешить дальней-
торой можно получить детальную ин- тивирусным программам, RegRun от- шее выполнение (см. рис. 6).
формацию об автоматически запуска- крывает и контролирует множество
емых программах. программ-«приманок», если обнаружи- Контроль целостности
вается изменение любого из этих фай- с Xintegrity
лов, RegRun сообщит о присутствии Немного другим путем пошли разра-
вируса. Для Windows такой приманкой ботчики Xintegrity (http://www.xinteg-
является файл winbait.exe, автозапуск rity.com). Основная задача которой –
которой заносится в реестр и сравни- контроль целостности и обнаружение
вается с winbait.org, кроме того, пре- любого даже самого незначительно-
дусмотрена возможность добавления го изменения файлов. Кроме контро-
своего подконтрольного файла. Reg- ля содержания файлов, утилита обна-
Run имеет базу данных приложений, руживает изменения в структуре ка-
которая содержит описание наибо- талога, включая альтернативные по-
лее часто встречающихся программ, токи данных (Alternate Data Streams),
помогающую пользователю опреде- изменения параметров доступа к
Рисунок 5. Центр Управления RegRun лить принадлежность к одной из четы- файлам, регистрационных данных
Одной из самых полезных функций рех групп: необходимые, бесполезные, и сервисах. Для этого первоначаль-
является File Protection, защищающая опасные и по вашему выбору. RegRun но создается база данных, содержа-
компьютер от вирусов, троянов и рабо- проверяет присутствие любых потен- щая информацию о контролируемых
тающих со сбоями программ. Первона- циально опасных программ и инфор- приложениях. Интересно, что разра-
чально создается список файлов, со- мирует пользователя о них, кроме то- ботчики учли возможность скрыто-
стояние которых необходимо контро- го, он совместим со всеми известными го применения утилиты, и можно за-
лировать. Для последующего восста- антивирусами, и Антивирус Координа- дать любое название, расширение

12
безопасность
и месторасположение баз. Поэтому,
назвав файл как-то буднично, напри-
мер, kursovik.rtf или song.mp3 и поло-
жив в группу подобных файлов, мож-
но ее скрыть. При создании базы воз-
можны три варианта: в нее заносятся
только контрольные суммы файлов,
делается резервная копия всех дан-
ных, и резервные копии дополнитель-
но шифруются (256 бит AES). В пос-
ледних двух случаях, кроме контро-
ля, позволяют восстанавливать изме-
ненные файлы. В качестве контроль-
ной суммы можно использовать не-
сколько вариантов – от 128-разряд-
ной хеш-функции MD5 до AES с 256-
разрядной длиной ключа. При помо-
щи Xintegrity можно проверять целос-
тность файлов по требованию или за- Рисунок 6. Предупреждающее сообщение RegRun Run Guard
пустить ее в фоновом режиме, тогда
при обнаружении изменения поль-
зователь будет сразу же уведомлен.
Когда Xintegrity обнаружит такой из-
мененный файл, пользователю бу-
дет выдана подробная информация
о том, как и когда файл был изме-
нен, и при определенных опциях со-
здания базы будет предложено заме-
нить его резервной копией. Напри-
мер, на рис. 7 выведено различие
контролируемого файла и этого же
файла, зараженного вирусом Win32.
HLLP.Underscore.36864.
В целях безопасности при откры-
тии базы Xintegrity автоматически про-
веряет как себя, так и все зарегистри-
рованные базы на предмет целостно-
сти. При создании базы данных в нее
можно занести все файлы, лежащие в
определенном каталоге, либо при по-
мощи набора фильтров отобрать фай- Рисунок 7. Xintegrity позволяет сравнить измененный файл с оригиналом
лы, удовлетворяющие определенным в сети. И для каждой задать свой ре- ные приложения. Между тем произво-
критериям (размер, время модифика- жим проверки. дители уже встраивают подобные инс-
ции или создания, по типу, содержимо- трументы в свои утилиты. Например, Ti-
му, атрибутам и функциональным воз- Заключение ny Firewall (http://www.tinysoftware.com)
можностям). Имеется пункт, включаю- Существующие на сегодняшний день содержит Host Security Engine (HSE),
щий в себя все вышеперечисленное, а решения в области защиты информа- по принципу работы несколько напо-
также поддерживается Drag’and’Drop и ции эффективны в борьбе с уже извес- минающий проактивные антивирусы,
вставка файла с буфера обмена. Фай- тными угрозами и уязвимостями. Вре- а при помощи Track’n Reverse позво-
лы, расположенные на дисках с фай- мя реакции антивирусных компаний ляет в случае обнаружения зловред-
ловой системой FAT32, NTFS, и сете- после обнаружения неизвестного виру- ной утилиты вернуть систему в исход-
вые папки могут быть перечислены в са можно назвать медленным и доста- ное состояние. Или продукт компании
одной базе данных. Как видите, мож- точным для поражения тысяч компью- Aladdin (http://www.eAladdin.com) eSafe
но задать практически любые усло- теров. Но тенденции позволяют гово- (http://www.esafe.com) использует, кро-
вия. Поэтому можно создать несколь- рить о том, что нас ждет появление но- ме традиционных средств, и проактив-
ко баз, в одну собрать исполняемые и вых методов распространения угроз, с ный антивирус (Proactive Security En-
системные файлы, в другую – сетевые еще большей скоростью размножения. gine). По мнению многих аналитиков,
ресурсы, к которым имеете доступ, в Новые угрозы требуют нового подхода. ближайшее время пройдет под знаком
третью – ресурсы, способные работать В статье описаны только самостоятель- проактивной защиты.

№7, июль 2005 13


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

ЗАПУСКАЕМ SPAMD НА FreeBSD


Бороться и искать,
Найти и не сдаваться!

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


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

СЕРГЕЙ СУПРУНОВ
Найти и не сдаваться 220 test.ru ESMTP spamd IP-based SPAM blocker; Thu Jul 7 07:56:09 2005
Spamd – система фильтрации спама, использующая меха- HELO me
250 Hello, spam sender. Pleased to be wasting your time.
низм «черного», «белого» и «серого» списков. Интересен ал- MAIL FROM: me@me.ru
250 You are about to try to deliver spam. Your time will be spent, for nothing.
горитм работы по серому списку: сообщение, отправитель RCPT TO: serg@test.ru
которого не входит ни в белый, ни в черный списки, откло- 250 This is hurting you more than it is hurting me.
data
няется с ошибкой 451 (временная ошибка, повторите попыт- 354 Enter spam, end with "." on a line by itself
Hello, spamd!
ку позже). И по реакции удаленной системы на эту вежли- I test you!!!
вую просьбу принимается решение о занесении отправите- .
450 SPAM. Blocked by me.
ля в белый список. В следующих подразделах будет описан
принцип работы spamd, а необходимые для этого настройки Ко всему прочему, каждый символ ответных сообщений
рассмотрены далее в соответствующем разделе. выводится с задержкой в 1 секунду (по умолчанию, может
быть изменено). То есть для соединений, попавших на вход
Работа в «нормальном» режиме spamd, стандартный диалог будет отрабатываться чрезвы-
Spamd может быть сконфигурирован для работы в одном чайно медленно, и в итоге отправитель получает сообщение
из двух режимов – «нормальном» и «сером» (greylisting об ошибке. Таким образом, время соединения затягивает-
mode). Схема работы spamd в нормальном режиме пред- ся, спаммер должен полностью сформировать отправляе-
ставлена на рис. 1. мое сообщение, но в самый последний момент, буквально
после завершающей точки, соединение разрывается. При-
чем в случае 450-го кода ответа оно обычно остается в оче-
реди на отправку, и столь же безнадежные попытки могут
повторяться неоднократно.

Работа в «сером» режиме


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

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

«Запятая» для размышления


Поскольку принцип действия spamd связан с задержкой
сообщений, в ряде случаев это может оказаться критич-
ным. Например, установка этого фильтра на сервере про-
вайдера может породить массу возмущений со стороны
пользователей, привыкших к мгновенной доставке сооб-
щений. Поэтому spamd, особенно в «сером» режиме, боль-
ше пригоден для «внутреннего потребления», когда пере-
чень легальных отправителей известен и может быть за-
несен в белый список, а остальную почту можно и задер-
жать ненадолго.
Если вы, взвесив все «за» и «против», решили поста-
вить фильтр spamd или по крайней мере глубже познако-
Рисунок 2. Схема работы spamd в greylisting mode миться с ним, то продолжим.
Для адресов, занесенных в белый список, выполняется
отслеживание соединений на 25-й порт (эту работу выпол- Установить и не запутаться
няет spamlogd), и если активности не наблюдалось в тече- Инсталляция из системы портов никаких сложностей не вы-
ние времени, равного значению параметра whiteexp (864 ча- зывает. Все традиционно:
са по умолчанию), то адрес удаляется из белого списка.
# cd /usr/ports/mail/spamd; make install
Перенаправление
За перенаправление почтового трафика, согласно спискам Теперь осталось в файле /etc/rc.conf включить под-
spamd, на порт 8025 отвечает пакетный фильтр pf (также держку spamd и пакетного фильтра pf (если он не был за-
портированный во FreeBSD из OpenBSD). Для этого в /etc/ пущен ранее):
pf.conf нужно создать следующие записи:
pf _ enable="YES"
pf _ ßags=""
table <spamd> persist pßog _ enable="YES"
rdr pass inet proto tcp from <spamd> ↵
to any port smtp -> 1.2.3.25 port 8025 pfspamd _ enable="YES"
pfspamd _ ßags="-v"
Обратите внимание на такую особенность. В man 8
spamd в качестве примера показано перенаправление на Нужно обратить внимание вот на что: файл с именем
адрес 127.0.0.1. Однако если на вашей системе запущен spamd уже может находиться в вашей системе. Это гордое
еще и ipfw (что вполне вероятно), то для него по умолча- имя носит также и демон Spamassassin, и если вы устанав-
нию имеются такие правила (см. /etc/rc.firewall): ливали этот пакет, то соответствующий файл будет лежать
в /usr/local/bin/ (при условии, что не менялись стандартные
${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
spamd устанавливается в другое место, и перезаписи фай-
В итоге пакеты, которые перенаправит pf, ipfw безжа- лов произойти не должно.
лостно заблокирует. Поэтому, на мой взгляд, лучше исполь- Чтобы было проще разобраться, что к чему относится,
зовать адрес другого интерфейса (дополнительно можно приведу сравнительную таблицу:
указать его при запуске демона spamd с помощью ключа Таблица 1. Расположение компонентов Spamassasin и Spamd
-b). И в любом случае нужно обеспечить прохождение па-
кетов на порт 8025 через все фильтры, работающие в си-
стеме (это особенно актуально в случае закрытого бранд-
мауэра).
Таблица <spamd> формируется утилитой spamd-setup,
которая получает информацию из файла конфигурации /usr/
local/etc/spamd.conf. Адреса, входящие в списки, помечен-
ные в конфигурационном файле как black, будут занесены
в указанную таблицу при запуске фильтра spamd. Подроб- Небольшая проблема возникает при «ручном» управ-
нее использование списков будет рассмотрено позже при лении фильтром с использованием сценария из /usr/local/
обсуждении конфигурации. etc/rc.d: поскольку spamd не использует PID-файл, то при
Естественно, приведенный выше шаблон ни в коем слу- запуске соответствующего скрипта с ключом «start» вы-
чае не является обязательным. Вы можете ограничиться пе- полняется проверка по имени запущенных процессов. Так
ренаправлением только запросов, приходящих на конкрет- как при этом обнаруживаются процессы, принадлежащие
ный адрес, пропускать нужные (например, собственные) spamassassin, то запуск не выполняется:

№7, июль 2005 15


безопасность
# ./pfspamd.sh start whitelist:\
:white:\
pfspamd already running? (pid=26357 26359 26361 26363 26366). :Þle=/usr/local/etc/spamd/whitelist.txt:

Обойти это можно, запуская pfspamd.sh с ключом «fast- А это белый список. Параметр «msg» здесь за ненадоб-
start» вместо «start». При этом проверка того, запущен ли ностью не используется. Если адрес отправителя занесен
соответствующий процесс, выполняться не будет, эта за- в указанный файл, то он будет исключен из предыдущего
бота ложится на плечи администратора. черного списка, если там окажется.
При автоматическом запуске во время загрузки системы На основании данного конфигурационного файла spa-
первым стартует pfspamd.sh (rc-сценарии исполняются в по- md-setup формирует черные списки. При этом адреса в них
рядке, определяемом утилитой rcorder, но в данном случае упорядочиваются по возрастанию, исключаются дублиро-
требования к порядку запуска у рассматриваемых скрип- вания и пересечения подсетей так, чтобы любой адрес был
тов одинаковы, и они будут выполняться в алфавитном по- представлен только в единственном экземпляре. Адреса,
рядке, так что pfspamd.sh имеет преимущество). Поскольку присутствующие в белом списке, исключаются из предыду-
запускаемый вторым скрипт sa-spamd.sh ориентируется по щего черного (и только из него). Если «белый» адрес дол-
своему PID-файлу, то и его старт проходит нормально. жен быть исключен из нескольких черных списков, в сек-
ции «all» соответствующий белый список следует указать
Настроить и запустить после каждого такого черного списка.
Настройки белых и черных списков для spamd сосредоточе- Сформированные списки утилита spamd-setup загружа-
ны в файле /usr/local/etc/spamd.conf. Сразу после установки ет в таблицу <spamd> фильтра pf (используя команду pfctl),
в указанном каталоге будет находиться только файл spamd. а также отправляет их на управляющий порт (tcp/8026) де-
conf.sample, который следует переименовать в spamd.conf и мону spamd.
подправить под собственные нужды. Кроме того, потребует- В ходе тестирования было выявлено интересное поведе-
ся внести ряд изменений в файл /etc/pf.conf (конфигурацион- ние демона (используемая версия программы – 3.7) – то ли
ный файл пакетного фильтра pf). Также нужно знать ключи из-за ошибки разработчика, то ли по иной недосягаемой для
запуска spamd, поскольку именно ими определяется режим моего понимания причине spamd при обработке данных, по-
работы демона и значения используемых параметров. ступающих на порт 8026, не воспринимает последний (самый
большой) адрес. Поскольку в таблицу <spamd> он заносится
Параметры spamd.conf нормально, то перенаправление на порт 8025 его соедине-
Данный конфигурационный файл используется утилитой ний выполняется, но spamd как «черный» данный адрес не
spamd-setup для первоначальной настройки таблиц pf при воспринимает, помечая его как серый (GREY) и возвращая
запуске spamd. Формат spamd.conf достаточно прост и со- вместо ответа 450 или 550, определяемого ключами запу-
ответствует getcap(3). В нем обязательно должна присут- ска, код 451 «Временная ошибка». Но так как на MTA такое
ствовать запись all: соединение все равно не проходит, на корректность работы
фильтра эта ошибка практически не влияет.
all:\ Несколько слов нужно сказать о формате списков. Это
:spamhaus:blacklist:whitelist:
обычные текстовые файлы (могут быть упакованы утилитой
В этой записи перечислены используемые списки в по- gzip), в которые заносятся черные или белые адреса, ин-
рядке их применения. В данном случае описаны следую- тервалы адресов или подсети, по одному в каждой строке.
щие три списка: Допускаются комментарии, начинающиеся с символа «#».
После адреса могут содержаться любые пометки – при об-
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: 192.168.0.5 # Отдельный IP-адрес
10.0.0.1 – 10.0.2.255 # Диапазон адресов наглых спаммеров!!!
Данный список для блокировки нежелательной почты 5.6.7.0/24 # Так можно задать подсеть
# Попытка обмануть spamd:
использует информацию о спаммерах, собираемую сайтом 255.255.255.254
spamhaus.org (для загрузки по http используется файл, со-
храненный на сервере openbsd.org). Последняя строчка может быть использована для ре-
шения описанной выше проблемы. Поскольку при сорти-
blacklist:\ ровке данный адрес окажется последним (независимо от
:black:\
:msg="SPAM. Blocked by me":\ его места в файле списка), то именно он не будет воспри-
:Þle=/usr/local/etc/spamd/blacklist.txt: нят демоном spamd. Все остальные адреса нормально бу-
дут обработаны как «черные». Однако не забывайте, что та-
Эта запись указывает на необходимость загрузить в кой «завершающий» адрес все равно попадет в <spamd> и
черный список адреса из указанного локального файла. будет перенаправляться.
Поскольку этот метод используется по умолчанию, ключ Наблюдать за процессом заполнения черных списков
«method» опущен. можно, запустив spamd-setup с ключом -d:

16
безопасность
# /usr/local/sbin/spamd-setup -d all:\
:blacklist:
Getting http://www.openbsd.org/spamd/spews_list_level1.txt.gz
blacklist spews1 18541 entries blacklist:\
Getting http://www.openbsd.org/spamd/spews_list_level2.txt.gz :black:\
blacklist spews2 22641 entries :msg="SPAM. Blocked by me":\
Getting http://www.openbsd.org/spamd/chinacidr.txt.gz :Þle=/usr/local/etc/spamd/blacklist.txt:
blacklist china 321 entries
Getting http://www.openbsd.org/spamd/koreacidr.txt.gz
blacklist korea 162 entries В данном случае в таблицу <spamd> фильтра pf зано-
blacklist myblack 1 entries сятся все адреса из файла blacklist.txt. Все остальные ис-
whitelist mywhite 4 entries
точники будут пропущены на реальный MTA. Если же до-
Не забывайте выполнять spamd-setup каждый раз после бавить белый список:
перезапуска pf, чтобы вновь заполнить таблицу <spamd>.
Так же полезно занести вызов этой утилиты в crontab, что- all:\
:blacklist:whitelist:
бы периодически (например, раз в сутки) обновлять внеш-
ние черные списки. blacklist:\
:black:\
:msg="SPAM. Blocked by me":\
Настройка журналирования :Þle=/usr/local/etc/spamd/blacklist.txt:
Демон spamd пишет свои сообщения в syslog. Чтобы со- whitelist:\
брать все сообщения в одно место, удобно направить их :white:\
:Þle=/usr/local/etc/spamd/whitelist.txt:
в отдельный файл, для чего в /etc/syslog.conf поместим
строки: то в таблицу <spamd> попадет содержимое blacklist.txt за
исключением адресов, перечисленных в whitelist.txt. При-
!spamd чем таким свойством «вычитания» обладает только белый
*.* /var/log/spamd.log
список, приведенный в строке «all» непосредственно пос-
Правда, при такой настройке Spamassassin (если он ле имени черного.
запущен) тоже будет использовать этот файл. Поскольку
syslogd не создает отсутствующие файлы, то это придется «Серый» режим
сделать вручную, после чего нужно отправить сигнал HUP В сером режиме, как было показано выше, белый список
процессу syslogd: применяется явно, в то время как адреса, не представлен-
ные ни в одном из списков, получают серый оттенок и об-
# touch /var/log/spamd.log рабатываются особым образом. Для реализации этого, во-
# kill –HUP `cat /var/run/syslog.pid`
первых, требуется дополнительная таблица и правило пе-
Теперь сообщения от демона spamd будут собирать- ренаправления в /etc/pf.conf:
ся в файле /var/log/spamd.log. На стадии отладки для по-
вышения информативности можно будет запускать spamd table <spamd-white> persist
rdr pass inet proto tcp from !<spamd-white> to ↵
с ключом -v. any port smtp -> 1.2.3.25 port spamd
Типичный вывод выглядит следующим образом:
Jul 7 07:39:49 konst spamd[23]: 1.2.3.4: connected (2/2), lists: korea
В итоге соединения, источник которых не включен в
Jul 7 07:39:55 konst spamd[23]: (BLACK) 1.2.3.4: <br9@tlcm.ru> -> <kp@test.ru> <spamd-white>, тоже будут перенаправляться на порт 8025. За
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: kp@test.ru формирование белого списка теперь отвечает сам spamd, ди-
Jul
Jul
7
7
07:39:58
07:39:58
konst
konst
spamd[23]:
spamd[23]:
1.2.3.4: Subject: =?Windows-1251?B?wg6vPv4O3o5ewu?=
1.2.3.4: Body: <head> намически добавляя нужные адреса в таблицу <spamd-white>.
Jul
Jul
7
7
07:39:58
07:39:58
konst
konst
spamd[23]:
spamd[23]:
1.2.3.4: Body: <title></title>
1.2.3.4: Body: </head>
За черный список по-прежнему отвечает spamd-setup.
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"> списки spamd.conf, лишь исключаются из черных. То есть
spamd будет воспринимать их как серые.
Jul 7 07:39:58 konst spamd[23]: 1.2.3.4: disconnected after 9 seconds. lists: korea

То есть здесь можно найти информацию о времени уста- Во-вторых, чтобы spamd запустился в сером режиме,
новления и разрыва соединения, а также об отправителе и используется ключ «-g», который нужно указать в файле
получателе сообщения. Кроме того, в лог-файл (в режиме /etc/rc.d в строке pfspamd_flags:
подробного вывода, настраиваемого опцией -v) выводятся
заголовок и несколько первых строк тела сообщения. pfspamd _ ßags="-g –G 25:4:864 -v"
Если для протоколирования работы spamd вы исполь-
зуете отдельный файл, то не забудьте добавить для него Необязательный ключ «-G» задает временные интерва-
правило ротации в /etc/newsyslog.conf. лы соответственно для pastime, greyexp и whiteexp. Здесь же
можно добавить ключ «-v», чтобы на период отладки полу-
Нормальный режим чать более подробную информацию о работе фильтра.
В нормальном режиме spamd используется только для за- Возможно, я что-то упустил в процессе настройки, но
держки спам-трафика, поэтому перенаправление выполняет- при включении серого режима на экран стали выводиться
ся лишь для адресов, занесенных в черный список. Белые спи- такие сообщения об ошибке:
ски используются для удаления адресов из черных списков.
Например, рассмотрим такой конфигурационный файл: pfctl : /dev/fd/7: No such file or directory

№7, июль 2005 17


безопасность
Добиться нормальной работы удалось после ручного вторные попытки) либо слишком частые попытки «протол-
монтирования файловой системы дескрипторов fdescfs кнуть» вам свое письмо.
(см. man 5 fdescfs):
Используем ловушки
# mount _ fdescfs 7 /dev/fd/ При работе в «сером» режиме возможно использование так
называемых ловушек – фиктивных адресов электронной поч-
Как видно на представленном ниже листинге, spamd в ты, которые в вашей системе отсутствуют. Если на такой адрес
«сером» режиме запускает еще два процесса – отвечаю- будет получено письмо, его отправитель автоматически зано-
щий за обновление белого списка (процесс 6017) и за об- сится в черный список сроком на 24 часа. Хороший эффект
новление базы /var/db/spamd (процесс 6020): дает использование в качестве ловушки популярных у спам-
6017 ?? Ss 0:00,02 spamd: (pf <spamd-white> update) (spamd) меров адресов (alex, max, oao, sales и др.). Подобная ловушка
6018 ?? S 0:00,07 /usr/local/libexec/spamd -v -g -G5:1:2 заносится в базу /var/db/spamd следующей командой:
6020 ?? S 0:00,00 spamd: (/var/db/spamd update) (spamd)

Файл /var/db/spamd, хранящий информацию о поступив- # /usr/local/sbin/spamdb -T -a "<max@test.ru>"


# /usr/local/sbin/spamdb -t -a 10.0.0.225
ших запросах и их дальнейшей судьбе, создается автома- # /usr/local/sbin/spamdb | grep TRAP
тически, когда spamd запускается с ключом -g. Посмотреть SPAMTRAP|max@test.ru
состав этой базы можно, если выполнить команду spamdb TRAPPED|10.0.0.225|1120817623

без параметров: Ключ -T позволяет добавить ловушку. Адреса, с которых


будут выполняться попытки доставить почту на адрес ловуш-
# /usr/local/sbin/spamdb ки, заносятся в базу как TRAPPED и обрабатываются как при-
GREY|1.2.3.4|<ab@cd.com>|<qw@test.ru>|1120715668|1120719268|1120719268|1|0 надлежащие черному списку, пока не пройдут сутки с момен-
GREY|5.6.7.8|<sv@ef.com>|<fort@test.ru>|1120716752|1120720352|1120720352|1|0
WHITE|10.0.0.203|||1120715625|1120717099|1120724330|2|0
та последней попытки соединения. Через 24 часа адрес уда-
ляется из базы и вновь обрабатывается как «серый». С по-
Поля в каждой строчке означают следующее (слева на- мощью ключа -t можно вручную добавить в базу адрес как
право): тип записи (GREY, WHITE и т. п.), IP-адрес источника, «пойманный», как это показано для адреса 10.0.0.225.
адрес отправителя, адрес получателя, время первой попыт-
ки, время перехода адреса из статуса GREY в статус WHITE, Подробнее о ключах запуска
время удаления записи из базы, количество заблокирован- Spamd помимо ключей g, G, v, которые нам уже встреча-
ных попыток, количество пропущенных соединений. лись, может быть запущен еще с несколькими полезны-
Если повторная попытка соединения будет выполнена ми опциями:
спустя интервал pastime, но до истечения периода greye- ! -b: указывается IP-адрес интерфейса, на котором spa-
xp, адрес заносится в таблицу <spamd-white>, и в дальней- md будет ожидать входящие соединения (по умолчанию
шем соответствующие соединения пропускаются на MTA. прослушиваются все имеющиеся интерфейсы).
Состав таблицы <spamd-white> можно посмотреть следу- ! -s: задает время задержки перед выводом каждого сим-
ющей командой: вола в диалоге с отправителем, занесенным в один из
черных списков. По умолчанию задано значение, рав-
# pfctl -t spamd-white -Tshow ное 1 секунде.
10.0.0.203 ! -4 или -5: код ответа спаммеру, 450 (по умолчанию) или
550 соответственно.
С помощью команды /usr/local/sbin/spamdb можно до- ! -c: максимальное число одновременных подключений.
бавлять в базу данных новые «белые» адреса либо уда- ! -B: максимальное число одновременных подключений
лять имеющиеся: для адресов, занесенных в черный список.
! -n: строка, выводимая в баннере приветствия.
# /usr/local/sbin/spamdb ! -d: запущенный с этим ключом spamd не переключает-
GREY|1.2.3.4|<ab@cd.com>|<qw@test.ru>|1120715668|1120719268|1120719268|1|0 ся в фоновый режим, что позволяет наблюдать на экра-
GREY|5.6.7.8|<sv@ef.com>|<fort@test.ru>|1120716752|1120720352|1120720352|1|0
WHITE|10.0.0.203|||1120715625|1120717099|1120724330|2|0
не то, как он работает.
root# /usr/local/sbin/spamdb -d 10.0.0.203
root# /usr/local/sbin/spamdb Поскольку spamd не имеет конфигурационного файла
(напомню, что spamd.conf обрабатывается утилитой spamd-
GREY|1.2.3.4|<ab@cd.com>|<qw@test.ru>|1120715668|1120719268|1120719268|1|0
GREY|5.6.7.8|<sv@ef.com>|<fort@test.ru>|1120716752|1120720352|1120720352|1|0 setup), то единственный способ настроить его работу – ис-
root# /usr/local/sbin/spamdb -a 10.161.193.253 пользование ключей запуска.
root# /usr/local/sbin/spamdb
WHITE|10.0.0.203|||1120730510|1120730510|1123840910|1|0 Доработать и …
GREY|1.2.3.4|<ab@cd.com>|<qw@test.ru>|1120715668|1120719268|1120719268|1|0
GREY|5.6.7.8|<sv@ef.com>|<fort@test.ru>|1120716752|1120720352|1120720352|1|0
Пожалуй, одного инструмента для комфортной работы со
spamd не хватает – при первоначальном запуске в сером ре-
Механизм «greylisting mode», конечно, не дает абсолют- жиме адреса разрешенных отправителей (например, удален-
ной гарантии, что спам не попадет в ящики пользователей. ных сотрудников, адреса главного офиса и т. д.) приходится
В этом режиме лишь предпринимается попытка отсеять слу- заносить в таблицу <spamd-white> вручную. Попробуем уст-
чайные соединения (для которых не будут выполняться по- ранить это неудобство подручными средствами, разработав

18
безопасность
на Python несложный скрипт, который будет заносить белые # cat wl.txt
адреса в базу /var/db/spamd из текстового файла:
10.10.29.192/29
1.2.3.4/33
Листинг 1. Сценарий a2w.py

#!/usr/local/bin/python Подсети, определяемые по наличию символа «/», функ-


цией Expand «разворачиваются» в список отдельных IP-
import sys, os
адресов whitelist, который затем поэлементно передается
def Usage(): программе spamdb. Если длина маски задана неправильно,
print 'Usage: a2w.py Þlename'
sys.exit(-1) то сценарий оставляет запись как есть, возлагая обработку
ошибки на утилиту spamdb (вторая запись в файле wl.txt де-
# Подпрограмма «разворачивает» подсеть в список адресов
def Expand(subnet): монстрирует поведение в этом случае). Если отладка вклю-
global whitelist чена (переменная DEBUG не равна 0), то каждая попытка
if subnet.Þnd(‘/’) == -1: и ее результат будут отображаться на экране:
subnet = subnet + '/32'
netaddr, masklen = subnet.split('/') # ./a2w.py wl.txt
masklen = int(masklen)
Try: /usr/local/sbin/spamdb -a 10.20.29.192 ok
# Если ошибка – оставляем запись как есть
if masklen < 1 or masklen > 32: Try: /usr/local/sbin/spamdb -a 10.20.29.193 ok
whitelist.append(subnet) Try: /usr/local/sbin/spamdb -a 10.20.29.194 ok
return Try: /usr/local/sbin/spamdb -a 10.20.29.195 ok
Try: /usr/local/sbin/spamdb -a 10.20.29.196 ok
# Здесь используется синтаксис «расширенного списка» – Try: /usr/local/sbin/spamdb -a 10.20.29.197 ok
# результат будет получен как список значений функции int Try: /usr/local/sbin/spamdb -a 10.20.29.198 ok
# для каждого элемента в списке, возвращаемом функцией split Try: /usr/local/sbin/spamdb -a 10.20.29.199 ok
o1, o2, o3, o4 = [int(o) for o in netaddr.split('.')] Try: /usr/local/sbin/spamdb -a 10.20.29.200 ok
for i in range(0, 2 ** (32 - masklen + 1)): Try: /usr/local/sbin/spamdb -a 10.20.29.201 ok
addr = '%d.%d.%d.%d' % (o1, o2, o3, o4) Try: /usr/local/sbin/spamdb -a 10.20.29.202 ok
whitelist.append(addr) Try: /usr/local/sbin/spamdb -a 10.20.29.203 ok
o4 += 1 Try: /usr/local/sbin/spamdb -a 10.20.29.204 ok
if o4 == 256:
Try: /usr/local/sbin/spamdb -a 10.20.29.205 ok
o3 += 1; o4 = 0
if o3 == 256: Try: /usr/local/sbin/spamdb -a 10.20.29.206 ok
o2 += 1; o3 = 0 Try: /usr/local/sbin/spamdb -a 10.20.29.207 ok
if o2 == 256: spamdb: invalid ip address 1.2.3.4/33
o1 += 1; o2 = 0 Try: /usr/local/sbin/spamdb -a 1.2.3.4/33 Failed
# Если нельзя, но очень хочется – то можно! WARNING: executed with errors (see above)
# (Это про несколько операторов в одной строке…)
#---------------------------------------------- После выполнения сценария можно убедиться, что соот-
if len(sys.argv) != 2: ветствующие адреса добавлены в базу как «белые»:
Usage()

DEBUG = 1 # /usr/local/sbin/spamdb | grep WHITE


errcnt = 0
spamdbcmd = '/usr/local/sbin/spamdb' WHITE|10.20.29.192|||1120801435|1120801442|1123911842|1|1
Þlelist = open(sys.argv[1], 'r').readlines() WHITE|10.20.29.193|||1120801435|1120801442|1123911842|1|1
whitelist = [] WHITE|10.20.29.194|||1120801435|1120801442|1123911842|1|1
for line in Þlelist: WHITE|10.20.29.195|||1120801435|1120801442|1123911842|1|1
Expand(line[:-1]) WHITE|10.20.29.196|||1120801435|1120801442|1123911842|1|1
WHITE|10.20.29.197|||1120801435|1120801442|1123911842|1|1
for addr in whitelist: WHITE|10.20.29.198|||1120801436|1120801442|1123911842|1|1
cmd = spamdbcmd + ' -a ' + addr
WHITE|10.20.29.199|||1120801436|1120801442|1123911842|1|1
# Запятая после аргументов команды print WHITE|10.20.29.200|||1120801436|1120801442|1123911842|1|1
# оставляет курсор на текущей строке WHITE|10.20.29.201|||1120801436|1120801442|1123911842|1|1
if DEBUG: WHITE|10.20.29.202|||1120801436|1120801442|1123911842|1|1
print 'Try: ' + cmd, WHITE|10.20.29.203|||1120801436|1120801442|1123911842|1|1
WHITE|10.20.29.204|||1120801436|1120801442|1123911842|1|1
# Функция os.system вернет 0, если указанная WHITE|10.20.29.205|||1120801436|1120801442|1123911842|1|1
# как аргумент команда будет выполнена успешно WHITE|10.20.29.206|||1120801436|1120801442|1123911842|1|1
err = os.system(cmd) WHITE|10.20.29.207|||1120801436|1120801442|1123911842|1|1
if err:
errcnt += 1
if DEBUG: Кстати, аналогично можно поступить и с ловушками, ес-
print 'Failed'
else: ли вы планируете создать их достаточно большое количе-
if DEBUG: ство. Эту задачу оставлю вам в качестве упражнения.
print 'ok'

if errcnt:
print 'WARNING: executed with errors (see above)'
… поставить точку
Итак, мы рассмотрели работу пакета spamd в системе
Приведенный сценарий считывает данные из текстово- FreeBSD. Используемый им оригинальный подход к реше-
го файла, передаваемого как аргумент командной строки, и нию проблемы спама в ряде случаев оказывается весь-
заносит их в базу spamdb, используя команду /var/local/sbin/ ма эффективным. К тому же можно порадоваться, что
spamdb -a. Формат текстового файла не допускает коммента- теперь не только спаммеры могут портить нам жизнь –
риев, пустых строк и т. д. Он может содержать только IP-адре- есть инструмент, с помощью которого можно ответить
са или подсети в формате CIDR, по одной записи в строке: им тем же.

№7, июль 2005 19


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

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

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


и взглянули на него с пользовательской точки
зрения [1]. Теперь перейдем к практической
части и начнем развертывать инфраструктуру
Kerberos в локальной сети.
МИХАИЛ КОНДРИН
Устанавливаем контроллер Kerberos [libdefaults]
default _ realm=MYREALM.RU
Начнем установку сервера Heimdal на компьютере с ОС [realms]
Linux. Если Heimdal не включен в состав вашего дистри- MYREALM.RU={
kdc=kdc.myrealm.ru
бутива, то вы можете получить исходный код Heimdal с admin _ server=kdc.myrealm.ru
ftp-сервера Стокгольмского университета (ftp://ftp.pdc. kpasswd _ server = kdc.myrealm.ru
}
kth.se/pub/heimdal/src), сконфигурировать и скомпилиро- [logging]
вать его. kdc=FILE:/var/log/krb5kdc.log
admin _ server=FILE:/var/log/kadmin.log
default=FILE:/var/log/krb5.log
tar xzvf heimdal-0.6.3.tar.gz
cd heimdal-0.6.3
./conÞgure --preÞx=/usr --enable-shared В этом файле содержится необходимый минимум на-
make строек Kerberos – название сектора по умолчанию (строка,
make install
которая будет добавляться к именам принципалов без до-
Опции конфигурации позволяют вам собрать Heimdal в менной части), расположение серверов Kerberos : kdc, сер-
виде разделяемых библиотек, что в дальнейшем упрощает вера удаленного администрирования и их лог-файлов. В ка-
сборку программ с поддержкой Kerberos, и установить He- честве альтернативы для передачи настроек Kerberos мож-
imdal в каталог /usr. При этом пользовательские програм- но использовать службу DNS, для чего в файл зоны для до-
мы (kinit, klist, telnet и т. д.) записываются в каталог /usr/bin, мена myrealm.ru нужно добавить записи (предполагается,
программы для удаленного администрирования контрол- что адрес для kdc уже записан в файле зоны):
лера Kerberos – в /usr/sbin, а серверная часть Kerberos – в
/usr/libexec. _ kerberos TXT "MYREALM.RU"
kerberos CNAME kdc
Если предполагаемое число принципалов невелико (на- _ kerberos. _ udp SRV 0 0 88 kdc
пример, порядка сотни), то Heimdal не требует особенно _ kerberos. _ tcp SRV 0 0 88 kdc
_ kerberos-adm. _ tcp SRV 0 0 749 kdc
большого количества вычислительных ресурсов. В моем _ kpasswd. _ udp SRV 0 0 464 kdc
случае в качестве kdc используется 486 компьютер. Жела-
тельно тем не менее держать базу данных Kerberos на спе- Передача настроек Kerberos по DNS полезна при боль-
циально выделенном для этой цели компьютере, т.к. захват шом числе клиентских компьютеров, когда синхронизиро-
злоумышленником этого сервера полностью компромети- вать файлы /etc/krb5.conf вручную сложно.
рует безопасность всей системы. Теперь можно приступать к пополнению баз данных
После того как компьютер выбран, на нем нужно соз- Kerberos.
дать каталог для хранения баз данных Kerberos.
sudo /usr/sbin/kadmin -l
kadmin>init MYREALM.RU
mkdir /var/heimdal kadmin>add admin/admin@MYREALM.RU
chmod 600 /var/heimdal kadmin>add mike@MYREALM.RU
kadmin> add --random-key host/kdc.myrealm.ru@MYREALM.RU
Далее нужно проделать две вещи: создать конфигу- kadmin>ext */kdc.myrealm.ru@MYREALM.RU
рационный файл kdc и инициализировать (заселить не-
сколькими основными принципалами) базу данных Ker- Ключ -l позволяет запускать kadmin в локальном режи-
beros. Конфигурационный файл (/etc/krb5.conf) использу- ме без аутентификации в Kerberos. Команда init создает ба-
ется как сервером Kerberos, так и приложениями, собран- зу данных Kerberos и заселяет ее несколькими принципала-
ными с поддержкой Kerberos. Поэтому этот файл (практи- ми со случайным образом сгенерированными ключами для
чески без изменений) можно перенести на все компьюте- сервисов, предоставляемых самим Kerberos. Это krbtgt/MY-
ры, входящие в ваш сектор (будем считать, что его домен- REALM.RU для Ticket Granting Service, kadmin/admin для сер-
ное имя myreal.ru). виса kadmind и kadmin/changepw для сервиса kpasswd, поз-

20
безопасность
воляющего пользователям менять свой пароли в Kerberos. Контроль доступа к kadmind и управлению пользовате-
Принципал kadmin/hprop, также создаваемый при инициали- лями Kerberos обеспечивается списками, хранящимися в
зации Kerberos, используется при синхронизации баз данных файле /var/heimdal/kadmin.acl. Разумная политика – предо-
между дополнительными и основным контроллерами секто- ставить администратору (admin/admin) полный контроль по
ра Kerberos, и в нашем случае он не актуален. С помощью ко- управлению записями Kerberos, а всем остальным – позво-
манда add в эту вновь созданную базу записываются пользо- лить лишь менять свои пароли. Для такой цели достаточно
ватели и сервисы. В данном случае добавляются пользова- иметь такой acl-файл:
тели – администратор Kerberos (admin/admin), еще один ря-
довой пользователь (mike) и принципал для компьютера, на admin/admin@MYREALM.RU all
*@MYREALM.RU cpw
котором работает контроллер Kerberos (host/kdc.myrealm.ru).
В отличие от первых двух случаев для сервиса пароль вы- Для проверки работоспособности сервера Kerberos по-
бирается случайным образом (ключ – random-key), посколь- пробуйте аутентифицироваться на нем (как администра-
ку знать его ни администратору Kerberos, ни тем более ря- тор) и посмотреть содержимое его баз данных:
довым пользователям необязательно. Затем этот ключ из-
влекается из базы данных Kerberos (команда ext) и дописы- kinit -p admin/admin
kadmin
вается в файл /etc/krb5.keytab. Керберизованные серверные kadmin> list *
программы знают, что их «пароли» записаны в этом файле и
при подключении клиента (см. схему работы Kerberos, изло- На этом установку сервера Kerberos можно считать за-
женную выше) могут извлечь свой пароль оттуда. В данном конченной. Настройка же клиентов для использования это-
случае права root для запуска kadmin необходимы, посколь- го сервера различается в случае рабочей станции и серве-
ку в результате помимо файла /etc/krb5.keytab в папке /var/ ров приложений. Разберем два случая – настройку только
heimdal, куда запись простым пользователям запрещена, со- сервера (компьютера, предлагающего сетевые сервисы)
здается файл heimdal.db с паролями принципалов. и только рабочей станции (которая не предлагает никаких
Теперь все готово для запуска сервера kdc. Если по- сервисов и предназначена только для локальной работы).
сле команды:
Настраиваем серверные программы
/usr/libexec/kdc -c /etc/krb5.conf --detach Настройка серверов приложений достаточно проста (при
условии, что на сервере работает UNIX-подобная система).
в log-файле появились сообщения вида: Во-первых, устанавливайте дистрибутив Heimdal, как опи-
сано выше. Этого уже достаточно, чтобы компьютер (пред-
2005-03-15T23:43:46 listening on IPv4:127.0.0.1 port 88/udp
2005-03-15T23:43:46 listening on IPv4:127.0.0.1 port 88/tcp
положим, что его сетевое имя server.myrealm.ru) работал как
клиент Kerberos, нужно только скопировать файл krb5.conf
значит, сервер успешно стартовал и можно переходить к с сервера Kerberos на настраиваемый компьютер. Конфи-
запуску сервера удаленного администрирования kadmind гурационный файл можно не редактировать – приведенный
(749/tcp-порт) и службы смены паролей kpasswdd (464/udp- выше файл подойдет как для серверов, так и рабочих стан-
порт). ций. Кроме того, как уже говорилось, на хосте с сетевыми
сервисами должен присутствовать файл /etc/krb5.keytab с
/usr/libexec/kadmind набором ключей для этих сетевых служб (точнее, для при-
/usr/libexec/kpasswdd
нципалов Kerberos, соответствующим этим сетевым служ-
Хотя для смены паролей можно использовать программу бам). Также сервису должно быть известно имя принципала,
kadmin (/usr/sbin/kadmin passwd mike), но для пользователей который представляет его в Kerberos. Как правило, этот па-
более удобно проделать то же самое с помощью утилиты раметр настраивается для каждого сервиса индивидуально
kpasswd, которая подключается к службе kpasswdd. (с помощью конфигурационных файлов) или используют-
Поскольку сервис kadmind нужен не очень часто (при ся какие-то фиксированные значения. В любом случае вам
добавлении/удалении принципалов), то имеет смысл ис- придется изучить документацию, предлагаемую разработ-
пользовать его вызов в сервере inetd (xinetd). Для этого чиками программы. Как уже говорилось ранее, для серви-
вам, во-первых, нужно убедиться, что ссылки на сервисы, сов используются имена, состоящие из трех компонентов –
собранные с поддержкой Kerberos (и kadmind в том числе) поле instance содержит сетевое имя компьютера, а основ-
присутствуют в файле /etc/services. Необходимые для это- ное имя обозначает тип предлагаемого сервиса. Предпо-
го данные содержатся в файле heimdal-0.6.3/etc/services. ложим, вы хотите установить все сервисы, входящие в дис-
append в дистрибутиве heimdal. Во-вторых, нужно добавить трибутив Heimdal (telnet, ftp, несколько r*-служб). Для этого
запись, касающуюся сервера удаленного администрирова- регистрируйтесь в Kerberos как администратор, добавляе-
ния, в файл /etc/inetd.conf и перeзапустить inetd. те принципалов host/server.myrealm.ru@MYREALM.RU, ftp/
server.myrealm.ru@MYREALM.RU и извлекаете их ключи в
kerberos-adm stream tcp nowait root ↵ локальный /etc/krb5.keytab файл.
/usr/libexec/kadmind kadmind

В то же время kpasswdd может работать только как са- kinit admin/admin


kadmin
мостоятельная служба, и организовать его вызов с помо- kadmin>add --random-key host/server.myrealm.ru@MYREALM.RU
щью inetd невозможно. kadmin>add --random-key ftp/server.myrealm.ru@MYREALM.RU

№7, июль 2005 21


безопасность
kadmin>ext */server.myrealm.ru@MYREALM.RU ных компьютеров (и контроллера Kerberos в том числе) по
протоколу time. Служба time уже встроена в сервер inetd,
Если вы ошиблись – добавили в /etc/krb5.keytab ключ нужно только убедиться, что в файле /etc/inetd.conf не за-
службы, которая не используется на данном компьютере, комментирована строка:
то для управления ключами в файле /etc/krb5.keytab пред-
назначена утилита ktutil. Удалить лишнюю запись мож- time dgram udp wait root internal
но командой /usr/sbin/ktut il remove -p ftp/server.myrealm.ru,
точно так же, как и просмотреть все записи в keytab-фай- Синхронизация осуществляется с помощью базовой
ле (ktutil list) или добавить новый ключ (ktutil get ftp/server. UNIX-утилиты netdate server.myrealm.ru. Для рабочих стан-
myrealm.ru). ций ее достаточно запускать при загрузке, для серверов,
Теперь настроим запуск сервисов через демон inetd, для которые перегружаются не так часто, имеет смысл вызы-
чего нужно добавить следующие строки в файл inetd.conf вать ее периодически с помощью демона cron.
(не забудьте также добавить записи из файла heimdal-0.6.3/ Еще один технический вопрос – вопрос о правах, кото-
etc/services.append к системному файлу /etc/services): рые нужно выставить на keytab-файл. Поскольку он содер-
жит пароли сетевых служб, то первая мысль, которая при-
telnet stream tcp nowait root ↵ ходит в голову, ограничить к нему доступ так же, как и к /etc/
/usr/libexec/telnetd telnetd -L /usr/bin/login
ftp stream tcp nowait root /usr/libexec/ftpd ftpd shadow – чтение только для root. Но сервисы тоже должны
shell stream tcp nowait root /usr/libexec/rshd rshd ↵ иметь возможность извлекать свои ключи из этого файла,
-vkshell stream tcp nowait root ↵
/usr/libexec/rshd rshd -k т.е. Keytab-файл также должен быть открыт для чтения поль-
ekshell stream tcp nowait root /usr/libexec/rshd ↵ зователем, с правами которого запущены сервисы. В нашем
rshd -kx
kx stream tcp nowait root /usr/libexec/kxd kxd случае это замечание не столь важно, поскольку все сер-
висы работают с правами root, но бывает ситуации, когда
Почти все сервисы стандартные, shell/kshell/ekshell – нужно дать доступ к keytab-файлу непривилегированным
это вариации на тему rshd. Первый из них работает просто службам. В таком случае стоит завести специальную груп-
как «заглушка», выдает сообщение об ошибке, если поль- пу и занеcти в нее всех системных пользователей, исполь-
зователь подключается по старинке, без TGT. Второй и тре- зуемых керберизованными службами, а файл /etc/krb5.key-
тий – керберизованные сервисы, использующие Kerberos tab открыть для чтения этой группе.
в последнем случае с шифрованием трафика. Нестандар-
тным является сервис kx (использует 2111/tcp-порт), кото- Настраиваем рабочие станции
рый предназначен для организации соединений по X-про- Для этого достаточно иметь упоминавшийся выше конфи-
токолу через шифрованный канал. Если вы, например, под- гурационный файл /etc/krb5.conf и собственно сам дистри-
ключитесь к серверу server.myrealm.ru с помощью команды бутив heimdal. Но бывает также удобно настроить систем-
rxtelnet server.myrealm.ru, то при успешном соединении на ный login на этой рабочей станции таким образом, чтобы при
вашем X-сервере откроется окно xterm с командным интер- входе на компьютер, пользователь автоматически получал
претатором, запущенном на удаленном компьютере (server. TGT с контроллера Kerberos. Для рабочих станций под уп-
myrealm.ru). Вся графика при этом будет прозрачно пере- равлением Linux такой функциональности можно добить-
адресовываться на вашу рабочую станцию. В некотором ся, заменив системный login (/bin/login) на керберизован-
смысле мы имеем аналог ssh – X server.myrealm.ru. ный аналог из состава Heimdal (/usr/bin/login). Проще все-
Поскольку время действия любого сертификата Kerbe- го это сделать, отредактировав файл /etc/inittab:
ros ограничено, то одной из задач при настройке сектора
Kerberos является синхронизация времени между компью- c1:123:respawn:/sbin/agetty 38400 tty1 linux
c2:123:respawn:/sbin/agetty 38400 tty2 linux
терами в локальной сети. Локальное время компьютера ис- k1:5:respawn:/sbin/agetty -l /usr/bin/login 38400 tty1 linux
пользуется клиентами Kerberos при запросе на выдачу би- k2:5:respawn:/sbin/agetty -l /usr/bin/login 38400 tty2 linux
лета, и если это время значительно отличается от времени
контроллера Kerberos (более чем на 5 минут), то такие за- и заменив default run-level на 5. Таким образом, по умолча-
просы отвергаются. Так что бесполезно, например, пред- нию загрузка компьютера будет осуществляться в кербери-
лагать контроллеру Kerberos просроченный TGT, просто пе- зованном режиме, а для аварийных ситуаций у админист-
реведя часы на локальном компьютере. Но с другой сторо- ратора компьютера сохраняется возможность заходить на
ны, удаленный доступ к какому-то компьютеру также мо- компьютер в стандартном режиме (в run-level 1,2,3). Следу-
жет быть невозможным только потому, что его часы опе- ет только иметь в виду, что керберизованный login запраши-
режают часы контроллера Kerberos, скажем, на 10 минут. вает помимо собственно супербилета еще и session ticket
Поэтому синхронизация времени внутри сектора необхо- для доступа к рабочей станции. Как вы понимаете, это тре-
дима для корректного функционирования Kerberos. Если бует наличия принципала, соответствующего данной ра-
у вас в локальной сети уже работает сервер ntp, то мож- бочей станции в базе данных Kerberos и ее ключа в файле
но воспользоваться им. Об установке и настройке сервера /etc/krb5.keytab. Заметим также, что если по каким-то при-
ntpd написано в статье [2]. Однако для целей Kerberos до- чинам аутентификация пользователя на сервере Kerberos
статочно, если вы выберете какой-то из компьютеров в ва- закончилась неудачей, то login переключается в стандарт-
шей сети (допустим, тот же самый server.myrealm.ru) в ка- ный режим и аутентифицирует пользователя по локально-
честве эталонного и будете сверять по нему часы осталь- му файлу /etc/shadow.

22
безопасность
Для рабочих станций под управлением 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/admin
kadmin
kadmin>add -pw passwordforWinXP host/xp.myrealm.ru@MYREALM.RU

№7, июль 2005 23


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

C:> ksetup /setdomain MYREALM.RU


C:> ksetup /addkdc MYREALM.RU kdc.myrealm.ru
C:> ksetup /setcomputerpassword passwordforWinXP

После чего перегрузить компьютер. При загрузке маши-


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

C:> ksetup /mapuser * *


C:> ksetup /mapuser mike@MYREALM.RU mikeXP

В первом случае каждый принципал из базы данных


Kerberos отображается на пользователя Windows c тем-
же именем (только без доменной части). Во втором слу-
чае (если вас такая политика не устраивает) вы разре-
шаете только определенному пользователю (mikeXP) ау-
тентифицироваться в Kerberos под именем принципала
mike@MYREALM.RU.
Так или иначе, но теперь вы можете при входе на рабо-
чую станцию одновременно получать сертификаты 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.

24
безопасность
У MIT-Kerberos в дефолтной установке используется кэш в зовать именно ее библиотеки. При этом поддержка Heimdal
памяти, но его можно настроить на использование диско- тоже может быть реализована авторами программы. Хотя
вого файла. Сделать это можно с помощью установки пе- заголовки функций Heimdal практически повторяют функции
ременной окружения Windows (KRB5CCNAME) и записей MIT-Kerberos, но структуры данных существенно различны.
в реестре Windows HKCU\Software\MIT\Kerberos5\ccname, Поэтому перелинковка приложения, разработанного под MIT
HKLM\Software\MIT\Kerberos5\ccname. Системой использу- Kerberos c библиотеками Heimdal, даже если у вас получится
ется первое непустое значение в этой последовательнос- это проделать, скорее всего, приведет к некорректной рабо-
ти или значение по умолчанию – «API:». Я использую bat- те приложения. Таким образом, модификация кода приложе-
файл, запускаемый при входе в Windows, который устанав- ния, пусть и небольшая, неизбежна в любом случае.
ливает переменную окружения KRB5CCNAME на название Это замечание особенно актуально для Windows. Мно-
файла, используемого Heimdal, и затем перемещает сер- гие керберизованные приложения, разработанные под
тификат Windows в этот файл утилитой ms2mit. Для каж- UNIX-системы, можно использовать в Windows в среде Cyg-
дого из пользователей Windows этот файл свой, поскольку win, поскольку для авторов портирование под Cygwin дает-
значение KRB5CCNAME зависит от идентификатора этого ся легче, чем перелицовывание программы под полноцен-
пользователя в Сygwin-окружении. ное Windows-приложение. Единственная реализация Ker-
beros, доступная для такого рода программ, – это Heimdal,
set KRB5CCNAME = FILE:C:\Cygwin\tmp\krb5cc _ 1017 и вам следует убедиться, что интересующее вас приложе-
ms2mit
ние поддерживает Heimdal. Удивительно, хотя MIT-Kerberos
То же самое вы можете проделать с помощью програм- и разрабатывается под UNIX-системы, но в Cygwin-окруже-
мы Leash32 (меню «Action → Import Ticket(s)/Token(s)»), так нии он неработоспособен.
же как просматривать/удалять имеющиеся сертификаты Исключением является ситуация, когда приложение ис-
и настраивать кэш сертификатов (меню «Options → Kerbe- пользует Kerberos не напрямую, а через интерфейс GSSAPI.
ros v5 Properties Dialog»). Примером такого приложения является ftp из дистрибути-
Здесь имеется еще одна ловушка, заботливо расстав- ва Heimdal. GSSAPI (Generic Security Service Application Pro-
ленная компанией Microsoft. Для большей безопасности в gram Interface) – это интерфейс, обеспечивающий стандар-
установке по умолчанию Support Tools экспорт начального тизованный доступ к функциям аутентификации Kerberos.
сертификата из памяти Windows запрещен, что делает его Как MIT-Kerberos, так и Heimdal предлагают свои реализа-
использование бесполезным для MIT-Kerberos и Heimdal. ции GSSAPI, поэтому в данном случае обе библиотеки ока-
К счастью (точнее, благодаря давлению со стороны разра- зываются полностью взаимозаменямыми.
ботчиков из MIT), Microsoft оставила ключи в реестре, с по- На этом установку Kerberos в гетерогенной сети можно
мощью которых можно снять этот запрет. Так что, для то- считать завершенной. В итоге вы можете управлять регис-
го чтобы утилита ms2mit работала, в реестре должны быть трационной информацией пользователей из одного места
установлены значения: (сервера kdc). Ваши пользователи получают регистрацию
в секторе Kerberos при входе на свои рабочие станции, про-
HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters зрачный доступ к компьютерам внутри сети с помощью ко-
AllowTGTSessionKey = 0x01 (DWORD)
HKLM\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos манд telnet и rsh, удаленный доступ к файлам при помощи
AllowTGTSessionKey = 0x01 (DWORD) ftp и rcp, шифрованный канал доступа к X-серверам. Ра-
зумеется, количество керберизованных сервисов не огра-
ничивается только службами из состава Heimdal, но уста-
Заключение новка и конфигурирование других сервисов требует отде-
Еще несколько слов о совместимости различных версий льного обсуждения.
Kerberos. Как вы могли только что убедиться, билетики,
получаемые от сервера Heimdal, работают во всех верси- Литература, ссылки:
ях клиентов Kerberos (Microsoft, MIT, Heimdal). То же самое 1. Кондрин М. Изучаем принципы работы Heimdal Ker-
верно, если бы в качестве сервера использовался KDC от beros. – Журнал «Системный администратор», №6,
MIT. Пример же использования библиотеки MIT-Kerberos 2005 г. – 56-59 с.
в домене Windows 2000 c Active Directory, где реализован 2. Платов М. Атомные часы на вашем столе. – Журнал «Си-
сервер Kerberos от Microsoft, разобран в статье [7]. Так что стемный администратор», №4, 2004 г. – 16-21 с.
на уровне протокола совместимость между реализация- 3. http://www.microsoft.com /downloads /details.aspx?
ми удовлетворительная. В то же время на уровне API сов- familyid=49AE8576-9BB9-4126-9761-BA8011FABF38&dis
местимость даже между Heimdal и MIT Kerberos оставля- playlang=en.
ет желать лучшего. 4. http://web.mit.edu/kerberos/www/dist/kfw/2.6/kfw-2.6.5/
Для того чтобы приложение (клиент или сервер) могло MITKerberosForWindows-2.6.5.exe.
использовать Kerberos, соответствующая поддержка долж- 5. http://web.mit.edu/kerberos/www/dist/kfw/2.6/kfw-2.6.5/
на быть заложена в код программы. Реализация протоко- MITKerberosForWindows-2.6.5.exe;
ла Kerberos c нуля сложна, поэтому, как правило, приложе- 6. http://web.mit.edu/kerberos/www/dist/kfw/2.6/kfw-2.6.5/kfw-
ние использует динамические библиотеки Kerberos. Реали- 2-6-5.zip.
зации от MIT пользуется большей популярностью, поэтому, 7. Гребенников Р. Танцуем самбу. – Журнал «Системный
скорее всего, интересующее вас приложение будет исполь- администратор», №11, 2004 г. – 32-38 с.

№7, июль 2005 25


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

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

АЛЕКСЕЙ БАРАБАНОВ
Сегодня мы рассмотрим настройку открытой версии Kerberos Heimdal для работы с OpenLDAP
в качестве хранилища учетных данных. Такое решение позволит вам создать однородную
информационную среду для обеспечения процесса аутентификации и авторизации
пользователей в Linux.

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

26
безопасность
щие Samba в атрибутах sambaLMPassword и sambaNTPass- Удивительно, но все собралось вопреки предупрежде-
word. Если в систему добавится Kerberos, то дополнительно ниям SuSE-гуру. Устанавливаем полученное.
каждому бюджету будет сопоставлены данные о принци-
пале Kerberos. Это тот же пароль и права на участие в от- # rpm -Uvh --force /usr/src/packages/RPMS/i586/heimdal-*.rpm
ношениях внутри определенной области Kerberos (Kerbe-
ros realm). Далее рассмотрим настройку Kerberos, работа- Проверяем, что теперь сборка выполнена с поддерж-
ющего с LDAP, по шагам. кой LDAP:

Собираем Heimdal # ldd /usr/lib/heimdal/sbin/kdc | grep ldap


Да-да, собираем. Оказывается, стандартный Heimdal, пос- libldap.so.2 => /usr/lib/libldap.so.2 (0x4007a000)
тавляемый в SuSE, собирается без поддержки LDAP. Для
проверки установим дистрибутивные пакеты: Все отлично, ссылка на библиотеку LDAP появилась.
Как и следовало ожидать, в информационных технологи-
# rpm -qa | grep heimdal ях здоровый скепсис всегда кстати.
heimdal-devel-0.6-67
heimdal-lib-0.6-67 Настраиваем OpenLDAP
heimdal-tools-0.6-67
heimdal-0.6-67
В отличие от NSS и PAM сервер Kerberos не имеет спе-
циального файла настройки LDAP-клиента. В отличие от
И посмотрим, с какими библиотеками скомпонован де- Postfix, Squid, Courier-IMAP он не имеет также опций на-
мон kdc: стройки LDAP-клиента в своих конфигурационных фай-
лах. И это совершенно правильное решение. Дело в том,
# ldd /usr/lib/heimdal/sbin/kdc | grep ldap что если подключения Kerberos к LDAP будет использо-
вать уязвимый способ аутентификации, то грош цена всей
Так как ссылок на ldap нет, то придется пересобрать остальной системной безопасности, которую несет техно-
Heimdal заново. Для этого установим исходные тексты: логия Kerberos. Защита внутри Kerberos, а в предлагаемом
способе подключения LDAP становится частью Kerberos,
# rpm -ivh heimdal-0.6-67.src.rpm должна гарантироваться физическими, а не информаци-
онными условиями. Другими словами, Kerberos может ра-
Можно даже взять версию поновее с сайта разработчи- ботать только с локальным сервером LDAP и только через
ков [2]. Режим сборки задается в файле rpm-спецификации локальное подключение, не допускающее перехвата ин-
в строках, где производится конфигурирование пакета пе- формационного обмена.
ред непосредственным выполнением команды make. Загля- Для этого настроим LDAP на прослушивание локально-
нем в оригинальный файл rpm-спецификации: го сокета. В SuSE это делается путем изменения специаль-
ного файла в sysconfig.
# cat /usr/src/packages/SPECS/heimdal.spec | ↵
sed -n "/^# building with openldap/,+14p"
# cat /etc/sysconÞg/openldap | grep LDAPI
# building with openldap support does not work right now because OPENLDAP_START_LDAPI="yes"
# autobuild cannot handle circular dependencies such as
# libhdb -> libldap -> libsasl -> libgssapi -> libhdb
#with_openldap="--with-openldap=/usr" А в других дистрибутивах надо просто настроить клю-
# чи запуска LDAP.
CFLAGS="$RPM_OPT_FLAGS -DOPENSSL_DES_LIBDES_COMPATIBILITY" \
./configure --enable-shared --prefix=/usr/lib/heimdal \ Вся информация внутри LDAP размещается согласно
--with-x --mandir=%{_mandir} \ определенным схемам. Есть такая схема и для размеще-
--libdir=%{_libdir} \
ния информации Kerberos. Эта схема не входит в состав
--infodir=%{_infodir} --libexecdir=/usr/lib/heimdal/sbin \
--includedir=/usr/include/heimdal \ дистрибутивных пакетов. Но ее нетрудно разыскать в Ин-
--with-readline-include=/usr/include/readline \ тернете. Авторство этой схемы принадлежит PADL Software
--with-readline-lib=/usr/lib \
$with_openldap Pty Ltd. Можно взять версию, прилагаемую к статье [3], или
make поискать поновее по ссылке [4]. Эту схему надо положить
ко всем остальным схемам и добавить соответствующую
Читаем предупреждение. Не верим. Снимаем коммен- ссылку на нее в файл настроек LDAP :
тарий с управляющей переменной и собираем пакеты зано-
во. Протокол сборки завершается сообщениями об успеш- # cat /etc/openldap/slapd.conf | grep krb5
ной записи новых rpm: include /etc/openldap/schema/krb5-kdc.schema

# rpmbuild -ba /usr/src/packages/SPECS/heimdal.spec Разрешим полный доступ через локальный сокет, доба-
..... вив соответствующие строки в настройки ограничений до-
Wrote: /usr/src/packages/SRPMS/heimdal-0.6-67.src.rpm ступа LDAP. Здесь используется специальный подключае-
Wrote: /usr/src/packages/RPMS/i586/heimdal-0.6-67.i586.rpm мый файл slapd.access.conf , содержащий очень грубую на-
Wrote: /usr/src/packages/RPMS/i586/heimdal-devel-0.6-67.i586.rpm
Wrote: /usr/src/packages/RPMS/i586/heimdal-lib-0.6-67.i586.rpm стройку условий доступа. Можно даже сказать так, что эта
Wrote: /usr/src/packages/RPMS/i586/heimdal-tools-0.6-67.i586.rpm настройка носит только учебный характер.

№7, июль 2005 27


безопасность
# cat /etc/openldap/slapd.access.conf | grep -v "^\(#\|$\)" «set user ID». Вроде все верно, только расположен он внут-
access to dn=".*,dc=office,dc=localnet" ри директории, доступной лишь для ldap.ldap.
by sockurl="^ldapi:///$" write
by self write # ls -als /var/run/slapd
by * read
total 24
Согласно указанным правилам все пользователи мо- 4 drwx------
4 drwxr-xr-x
4
20
ldap
root
ldap
root
4096
4096
Jun
Jun
12
12
13:04
23:02
.
..
гут читать всю базу LDAP, а вот править могут только лишь 0 srwx------ 1 root root 0 Jun 12 13:04 ldapi
собственные контейнеры. Строка «by sockurl=”^ldapi:///$”»
4 drwx------ 2 ldap ldap 4096 Sep 24 2003 openldap-data
4 drwx------ 2 ldap ldap 4096 Sep 24 2003 openldap-slurp
выбирает из всех запросов те, что поступают в LDAP через 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
локальный сокет, и дает таким клиентским подключениям
права на запись, то есть самые высокие по шкале эскала- Процесс kdc в SuSE запускается от пользователя root,
ции прав LDAP. Как уже стало понятно, базовый контейнер и поэтому нет никаких проблем с подключением к сокету
LDAP имеет имя dc=office,dc=localnet. для связи с LDAP. Если в некоторой системе приняты иные
Заметим, что хотя все атрибуты, использованные для соглашения, то недоступность локального сокета, создан-
хранения ключей принципалов, шифруются по мастер- ного LDAP, со стороны процесса kdc может быть причиной
ключу конкретного KDC (Kerberos Key Distribution Ceter или отказа Kerberos. Для исправления этого надо просто поме-
в русской аналогии ЦРК – центр распределения ключей), нять права доступа у сокета после запуска slapd.
для предотвращения доступа к таким записям со стороны Подключенный через локальный сокет Kerberos име-
иных служб рекомендуется настроить соответствующим об- ет исключительно доверительные права на доступ к базе
разом правила доступа к LDAP базе. Да и права, собствен- LDAP. Но это нужно только для режима наполнения базы
но, Kerberos тоже можно ограничить определенным уров- данными. Для регулярной работы Kerberos, аутентифика-
нем дерева LDAP. ции и выдачи билетов достаточно иметь доступ на чтение.
Но разрешить все со стороны локального сокета не до- То есть всегда остается возможность «заморозить» состо-
статочно. Поскольку Kerberos никак себя не аутентифици- яние базы Kerberos. Хотя верно это лишь для применяемой
рует при подключении к LDAP, то в сеансе связи он будет версии Heimdal, которая не обновляет индексы в базе при
считаться анонимным пользователем. В версиях OpenLD- выдаче билетов, и, естественно, в таком случае станет не-
AP с индексом более 2 модификация базы через такое под- возможным изменение паролей принципалов.
ключение приводит к ошибке.
Например, попытка инициализации области Kerberos Настраиваем Kerberos
завершается сообщением: Создадим файл управления службой Kerberos. Рабочей
областью Kerberos (в оригинале realm) назначим OFFICE.
kadmin: kadm5_create_principal: ldap_add_s:
Strong(er) authentication required
LOCALNET и ограничим перечень прослушиваемых адре-
сов внутрисетевыми. Должно получиться так:
Добавим специальную опцию «allow update_anon» в
управляющий файл LDAP перед директивами, описыва- # cat /etc/krb5.conf
ющими базу данных. Эта опция допускает изменение ба- [kdc]
зы LDAP анонимным клиентом, если последнее разреше- database = {
dbname = ldap:ou=KerberosPrincipals,dc=office,dc=localnet
но операторами access. log_file = /var/heimdal/log
Теперь можно запустить LDAP. acl_file = /var/heimdal/kadmind.acl
}
addresses = 127.0.0.1 192.168.0.1
# rcldap start
[libdefaults]
Starting ldap-server done default_realm = OFFICE.LOCALNET
server:~ # netstat -apn | grep slapd clockskew = 300
tcp 0 0 127.0.0.1:389 0.0.0.0:* LISTEN 11036/slapd dns_lookup_kdc = 1
unix 2 [ ACC ] STREAM LISTENING 82235 11036/slapd /var/run/slapd/ldapi
unix 2 [ ] DGRAM 182233 11036/slapd
[realms]
OFFICE.LOCALNET = {
Видно, что процесс slapd слушает не только локальный kdc = kerberos.office.localnet
адрес, но и сокет /var/run/slapd/ldapi. Здесь есть еще один admin_server = kerberos.office.localnet
kpasswd_server = kerberos.office.localnet
«подводный камень», который, возможно, будет иметь зна- }
чение для владельцев дистрибутивов, отличных от SuSE.
[domain_realm]
Дело в том, что традиционно LDAP запускается от соответ- .office.localnet = OFFICE.LOCALNET
ствующего пользователя.
[logging]
default = SYSLOG:NOTICE:DAEMON
# ps -eo user,args | grep slapd | grep -v grep | head –n 1 kdc = FILE:/var/log/kdc.log
kadmind = FILE:/var/log/kadmind.log
ldap /usr/lib/openldap/slapd -h ldapi:///
ldap://127.0.0.1:389/ -u ldap -g ldap [appdefaults]
pam = {
ticket_lifetime = 1d
И несмотря на это, сокет для связи создается от пользо- renew_lifetime = 1d
forwardable = true
вателя root и с правами, ограничивающими доступ к нему proxiable = false
от иных пользователей и групп, но с установленным битом }

28
безопасность
Проверим настройки специальной программой. Master key:
Verifying - Master key:
kstash: writing key to `/var/heimdal/m-key'
# verify _ krb5 _ conf

verify_krb5_conf: /kdc/database/log_file: unknown entry Проверим, что появился соответствующий файл.


verify_krb5_conf: /kdc/database/acl_file: unknown entry
# ls -als /var/heimdal
Сообщения игнорируем, так как они ошибочные. Мож- 4 -rw------- 1 root root 72 Jun 11 00:04 m-key
но или собрать более свежую версию verify_krb5_conf, или
сразу писать авторам сообщение об ошибке. В дальнейшем пароль, использованный для генера-
Прокомментирую секцию kdc и оператор database. Внутри ции мастер-ключа, можно забыть. Самое главное, не те-
указывается контейнер LDAP, в котором будут размещаться рять файл с мастер-ключом, так как без него KDC не смо-
записи, используемые Kerberos. Дополнительно определим жет работать с собственной базой. Считается, что копию
файл протокола и файл с установками ограничений доступа файла с мастер-ключом надо хранить отдельно от архива
к самой базе со стороны принципалов. Эти строки надо ука- базы Kerberos.
зывать обязательно. Но Kerberos работает со своей базой Подключимся к Kerberos в оффлайне (ключ -l) и настро-
на очень примитивном уровне и поэтому не имеет возмож- им область Kerberos.
ности анализировать специфические ошибки LDAP. Иначе
говоря, он не может распознать отсутствие подготовленно- # kadmin -l
го контейнера в LDAP и создать его самостоятельно. Зна- kadmin> init OFFICE.LOCALNET
чит, нужно предварительно создать контейнер для Kerberos Realm max ticket life [unlimited]:
Realm max renewable ticket life [unlimited]:
ou=KerberosPrin-cipals,dc=office,dc=localnet. Для этого подго- kadmin> exit
товим данные в специальном файле kerberos.ldif.
Проверим, используя опять же оффлайновое подклю-
# cat kerberos.ldif чение, что вышло.
dn: ou=KerberosPrincipals,dc=office,dc=localnet
ou: KerberosPrincipals # kadmin -l
objectClass: top
kadmin> list *
objectClass: organizationalUnit krbtgt/OFFICE.LOCALNET@OFFICE.LOCALNET
objectClass: domainRelatedObject kadmin/changepw@OFFICE.LOCALNET
associatedDomain: office.localnet kadmin/admin@OFFICE.LOCALNET
changepw/kerberos@OFFICE.LOCALNET
Здесь отмечу одну забавную особенность. На сайте [4] в kadmin/hprop@OFFICE.LOCALNET
default@OFFICE.LOCALNET
описании аналогичной настройки записан контейнер с ou= kadmin> exit
KerberosPrincpals, который отличается отсутствием буквы
«i» в слове «Principals». Это именно описка, поскольку там Интерпретируем результат. Итак, выше приведен пере-
же в примере с ldapsearch приведен грамматически пра- чень служебных принципалов, созданных автоматически.
вильный вариант. Но тем не менее многими такая форма Структура именования принципалов следующая: primary_
была воспринята как стандарт и бездумно повторена. Этот name/instance@REALM. Но в данном случае часть instance
случай свидетельствует о высоком уровне априорного до- имеет значение «роль». Для администрирования зарегис-
верия всякому экспертному мнению в области компьютер- трируем принципала sysadmin/admin.
ной безопасности.
Создадим контейнер для Heimdal. # kadmin -l

kadmin> add sysadmin/admin


# ldapadd -v -H ldap://localhost -D "cn=ldapadmin, ↵ Max ticket life [1 day]:
dc=ofÞce,dc=localnet" -x -w secret -f kerberos.ldif Max renewable life [1 week]:
Principal expiration time [never]:
ldap_initialize( ldap://localhost )
Password expiration time [never]:
add ou:
Attributes []:
KerberosPrincipals
add objectClass:
sysadmin/admin@OFFICE.LOCALNET's Password:
top Verifying - sysadmin/admin@OFFICE.LOCALNET's Password:
organizationalUnit kadmin> exit
domainRelatedObject
add associatedDomain: Вот пароль этого принципала надо запомнить обяза-
office.localnet тельно. Хотя в случае утери его можно восстановить через
adding new entry "ou=KerberosPrincipals,dc=office,dc=localnet"
modify complete оффлайновое подключение. Создание sysadmin/admin в
файле-реплике LDAP отображается следующим образом:
Теперь все готово для настройки Kerberos. time: 1118439261
dn: cn=sysadmin/admin@office.localnet,ou=KerberosPrincipals,dc=office,dc=localnet
changetype: add
Оффлайновое администрирование objectClass: top
objectClass: person
В первую очередь подготовим мастер-ключ. objectClass: krb5Principal
objectClass: krb5KDCEntry
krb5PrincipalName: sysadmin/admin@OFFICE.LOCALNET
# kstash krb5KeyVersionNumber: 1

№7, июль 2005 29


безопасность
krb5MaxLife: 86400 рирования kadmind прослушивает все возможные адреса
по порту 749, а вот kpasswdd, т.е. сервис изменения паро-
krb5MaxRenew: 604800
krb5KDCFlags: 126
krb5Key:: MCWhIzAhoAMCARChGgQYCCzqjwcCvAduYvIOzSVKuq33j9qeBJe5
krb5Key:: MBWhEzARoAMCAQOhCgQIUl6ATDGML2g=
лей, слушает на всех активных в данный момент адресах
krb5Key:: MBWhEzARoAMCAQKhCgQIUl6ATDGML2g= по порту 464, не исключая и двух внешних подключений к
krb5Key:: MBWhEzARoAMCAQGhCgQIUl6ATDGML2g=
cn: sysadmin/admin@office.localnet ISP. Другими словами, без firewall не обойтись, иначе если
sn: sysadmin/admin@office.localnet
structuralObjectClass: person не атаки, то сканирований не избежать. Но все вышеска-
entryUUID: 271bfa42-6e43-1029-90f0-b1a0d84cadb1
creatorsName: cn=anonymous
занное относится только к принятой в SuSE схеме запус-
createTimestamp: 20050610213421Z ка. Ничего не мешает запустить kadmind и kpasswdd через
entryCSN: 2005061021:34:21Z#0x0001#0#0000
modifiersName: cn=anonymous суперсервер xinetd, и уже средствами последнего ограни-
modifyTimestamp: 20050610213421Z
чить доступ. Схема запуска через суперсервер, кроме про-
Здесь видно, что создатель записей в контейнерах Ker- чего, еще и позволит сэкономить ресурсы.
beros anonymous.
Работаем в сети
Настраиваем DNS Теперь проверим, как будет работать не оффлайновое, а
Перейдем к настройкам удаленного доступа к сервисам Ke- сетевое администрирование Kerberos.
rberos. Сначала настроим DNS. Здесь предполагается, что
KDC запускается в локальной сети 192.168.0.0/24 на хосте # kadmin -p sysadmin/admin
192.168.0.1. Добавим в описание зоны office.localnet следу- kadmin> list *
ющие строки: sysadmin/admin@OFFICE.LOCALNET's Password:
kadmin: get *: Operation requires `get' privilege
kadmin> exit
$ORIGIN .ofÞce.localnet.
$TTL 86400 ; 1 day
_ kerberos TXT "OFFICE.LOCALNET." Это значит, в базе Kerberos не настроены права доступа.
kdc A 192.168.0.1 Ранее все подключения делались напрямую к базе данных,
kerberos A 192.168.0.1
$ORIGIN _ tcp.ofÞce.localnet. и права доступа не учитывались. Настроим их.
$TTL 600 ; 10 minutes
_ kerberos SRV 0 100 88 kerberos.ofÞce.localnet. # cat >/var/heimdal/kadmind.acl <<EOT
_ kerberos-adm SRV 0 100 749 kerberos.ofÞce.localnet.
_ kpasswd SRV 0 100 464 kerberos.ofÞce.localnet.
$ORIGIN _ udp.ofÞce.localnet. > sysadmin/admin all
$TTL 600 ; 10 minutes > * cpw
_ kerberos SRV 0 100 88 kerberos.ofÞce.localnet. > EOT
_ kpasswd SRV 0 100 464 kerberos.ofÞce.localnet.
Это значит, sysadmin/admin может делать все, а осталь-
Перезапустим сервер DNS и проверим, что разрешение ные только менять пароли. И теперь повторим попытку под-
имен работает нужным образом. ключения.

# dig _ kerberos. _ tcp.ofÞce.localnet any +short # kadmin -p sysadmin/admin

0 100 88 kerberos.office.localnet. kadmin> list *


sysadmin/admin@OFFICE.LOCALNET's Password:
krbtgt/OFFICE.LOCALNET@OFFICE.LOCALNET
kadmin/changepw@OFFICE.LOCALNET
Запускаем Kerberos kadmin/admin@OFFICE.LOCALNET
Настало время запустить службы Kerberos. changepw/kerberos@OFFICE.LOCALNET
kadmin/hprop@OFFICE.LOCALNET
default@OFFICE.LOCALNET
# rckdc start sysadmin/admin@OFFICE.LOCALNET
kadmin> exit
Starting kdc done
Как показала эта проверка, kdc перечитывает правила
Посмотрим, что вышло. доступа к базе при каждом обращении, то есть нет необ-
ходимости перезагружать демон.
# netstat -apn | grep "\(kdc\|kadmin\|kpasswd\)" И теперь проделаем все то же самое, но с удаленного
tcp 0 0 192.168.0.1:88 0.0.0.0:* LISTEN 10984/kdc компьютера, предварительно переложив туда файл настро-
tcp 0 0 127.0.0.1:88 0.0.0.0:* LISTEN 10984/kdc ек krb5.conf, который одновременно является и файлом на-
tcp
udp
0
0
0 :::749
0 XX.XXX.XX.XX:464
:::*
0.0.0.0:*
LISTEN 10986/kadmind
10988/kpasswdd
строек клиента Kerberos.
udp 0 0 192.168.0.1:464 0.0.0.0:* 10988/kpasswdd Получим билет для принципала sysadmin/admin на ра-
udp 0 0 YYY.YY.Y.YY:464 0.0.0.0:* 10988/kpasswdd бочей станции:
udp 0 0 10.0.0.1:464 0.0.0.0:* 10988/kpasswdd
udp 0 0 127.0.0.1:464 0.0.0.0:* 10988/kpasswdd
alekseybb@wsalekseybb:~> kinit sysadmin/admin
udp 0 0 192.168.0.1:88 0.0.0.0:* 10984/kdc
udp 0 0 127.0.0.1:88 0.0.0.0:* 10984/kdc sysadmin/admin@OFFICE.LOCALNET's Password:
udp 0 0 ::1:464 :::* 10988/kpasswdd kinit: NOTICE: ticket renewable lifetime is 1 week
unix 2 [ ] DGRAM 359313 10988/kpasswdd alekseybb@wsalekseybb:~> klist
Credentials cache: FILE:/tmp/krb5cc_500
Примечательно, что kdc, т.е. сервис аутентификации и Principal: sysadmin/admin@OFFICE.LOCALNET

выдачи билетов, запустился на внутренних адресах и пор- Issued Expires Principal


ту 88, как и планировалось. Сервис удаленного админист- Jun 11 02:14:33 Jun 11 12:15:57 krbtgt/OFFICE.LOCALNET@OFFICE.LOCALNET

30
безопасность
Здесь видно, что в кеше Kerberos для локального кли- Перечислим положительные приобретения:
ента alekseybb лежит билет от krbtgt/OFFICE.LOCALNET, ! Вся аутентификационная и бюджетная информация хра-
выписанный на принципала – администратора sysadmin/ нится в одной базе и, значит, может быть архивирована
admin@OFFICE.localnet. Такой билет называется суперби- единым образом.
лет (в оригинале – Ticket Granting Ticket), поскольку он да- ! Появляется возможность «заморозки» изменений в ба-
ет право на получение билетов на доступ ко всем другим зе Kerberos, что позволяет сделать его работу более на-
принципалам, расположенным в той же области Kerberos. дежной.
В нашем случае это список, полученный по команде «list *». ! Появляется второй канал репликации базы Kerberos
Проверим доступ к базе на правах администратора. за счет реплики LDAP. То есть возрастает доступность
(availability) службы KDC.
alekseybb@wsalekseybb:~> /usr/sbin/kadmin
kadmin> list * Теперь подсчитаем отрицательные:
krbtgt/OFFICE.LOCALNET@OFFICE.LOCALNET
kadmin/changepw@OFFICE.LOCALNET
! У KDC появляется зависимость от дополнительной служ-
kadmin/admin@OFFICE.LOCALNET бы, надежность предоставления сервиса которой надо
changepw/kerberos@OFFICE.LOCALNET
kadmin/hprop@OFFICE.LOCALNET
гарантировать теперь вдвойне.
default@OFFICE.LOCALNET ! Хотя использование мастер-ключа не позволяет вскрыть
sysadmin/admin@OFFICE.LOCALNET
kadmin> exit
или подменить ключи принципалов, но гарантия того, что
они не будут простого уничтожены, теперь лежит на дру-
Теперь снова заглянем в кеш билетов. гом сервисе и его настройках. Значит, в подобной схеме
хранения надежность определяется по наислабейшему
alekseybb@wsalekseybb:~> klist компоненту. Скорее всего, таким нужно считать LDAP.
Credentials cache: FILE:/tmp/krb5cc_500
Principal: sysadmin/admin@OFFICE.LOCALNET Во всех руководствах по созданию KDC записано тре-
Issued Expires Principal бование размещать KDC на отдельном хосте, который бо-
Jun 11 02:14:33 Jun 11 12:15:57 krbtgt/OFFICE.LOCALNET@OFFICE.LOCALNET
Jun 11 02:14:47 Jun 11 03:14:47 kadmin/admin@OFFICE.LOCALNET
лее ничем не может быть занят. Ну разве что SSH для ад-
министрирования. Но здесь же основанием для сочетания
Кроме супербилета, там появился второй билет, полу- Kerberos и LDAP главными были мотивы интегрального ха-
ченный на основании универсального и предназначенный рактера. С другой стороны, есть успешный пример такой
для доступа к принципалу kadmin/admin@ OFFICE.LOCAL- интеграции – разработка фирмы Microsoft под названием
NET. Оба билета выданы на «имя» sysadmin/admin. ActiveDirectory. Конечно, вопросы безопасности нужно про-
Значит, работает. Удостоверимся в том, что Heimdal не рабатывать очень тщательно и применительно к конкретно-
модифицирует в процессе аутентификации записи в базе. му составу приложений, которые будет обслуживать LDAP.
Для этого есть много способов, но достаточно более вни- Поскольку если в общей директории хранится еще и инфор-
мательно просмотреть записи в самой базе. мация Kerberos, то надо будет оградить ее от потенциаль-
но небезопасных приложений.
alekseybb@wsalekseybb:~> /usr/sbin/kadmin Ну и последнее соображение. Как следует из материа-
kadmin> list -l kadmin/admin лов работы [5], использование LDAP в качестве хранилища
Principal: kadmin/admin@OFFICE.LOCALNET увеличило среднее время обработки запроса с 8 мс до 2.4 с,
Principal expires: never
Password expires: never то есть почти в 300 раз. Конечно, измерения проводились
Last password change: never
Max ticket life: 1 hour
на области, содержащей 1000 принципалов, и на не очень
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-auth
1. Заметки по настройке размещения пользовательских
Keytypes(salttype[(salt-value)]): des-cbc-crc(pw-salt), бюджетов в LDAP: http://www.barabanov.ru/arts/LDAPre-
des-cbc-md4(pw-salt), des-cbc-md5(pw-salt), des3-cbc-sha1(pw-salt)
kadmin> exit
marks-2.pdf.
2. Домашний сайт проекта Heimdal: http://www.pdc.kth.se/
Видно, что поля с указанием времени последней ау- heimdal.
тентификации и прочие не установлены. Точно также 3. Схема для размещения информации Kerberos в LDAP:
можно убедиться в отсутствии модификаций по файлу- http://www.barabanov.ru/arts/kerberos_over_ldap/krb5-kdc.
реплике LDAP, в который должны заноситься все такие schema.
операции. 4. Лидер в области разработок АиА с использованием
LDAP: http://www.padl.com.
Взвесим «за» и «против» 5. Different database methods in Heimdal. Assar Westerlund,
Итак, давайте взвесим, какие преимущества достигаются Swedish Institute of Computer Science: http://www.chips.
комбинацией Kerberos и LDAP. Быть может, не стоило все chalmers.se/Chips/conference/made2000/presentations/
это и городить. danielsson.et.al.pdf.

№7, июль 2005 31


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

ASTERISK И LINUX: МИССИЯ IP-ТЕЛЕФОНИЯ


ДЕЙСТВИЕ 2

МИХАИЛ ПЛАТОВ
В прошлой статье [1] мы познакомились с основными возможностями Asterisk PBX,
настроив небольшую мини-АТС, работающую по протоколу SIP. Сегодня мы значительно
расширим ее функциональность, добавив поддержку протокола H323 и обеспечив связь
с городской сетью.

Альтернативный межгород Что же выбрать? Ответ на этот вопрос нужно искать ис-
В прошлый раз мы предоставили нашим пользователям воз- ходя из конкретных задач.
можности дешевой междугородной связи. Для этого мы под- Если вы используете STABLE-версию Asterisk, то вариан-
ключили наш сервер к сети одного из провайдеров по «род- ты ограничиваются первыми двумя представителями. При
ному» для Asterisk протоколу SIP. Однако, как показывает этом, если планируемое количество одновременных звон-
практика, провайдеры в большинстве своем не спешат пере- ков, совершаемых через H323, достаточно велико, то бо-
ходить на SIP и при предоставлении своих услуг продолжают лее предпочтительным будет chan_h323, если желательна
использовать более традиционный H323. Сильно расстраи- более «качественная» реализация H323, то лучше исполь-
ваться по этому поводу не стоит – рано или поздно все рав- зовать chan_oh323.
но все перейдут. А пока этого не произошло, решим эту про- Драйверы chan_ooh323 и chan_woomera можно реко-
блему со своей стороны – установим H323-модуль Asterisk. мендовать к использованию разработчикам и «очень про-
На данный момент мне известно о существования четырех двинутым пользователям», желающим заглянуть в за-
различных H323-драйверов (см. таблицу 1)для Asterisk: втрашний день (H323 и SIP поверх IPv6 и т. д.). Для наших
! chan_oh323 – исторически первый H323-драйвер для же задач возможностей chan_h323 или chan_oh323 будет
Asterisk. При работе использует RTP-стек библиотеки более чем достаточно. Определенности ради будем счи-
OpenH323, со всеми вытекающими отсюда последствиями тать, что мы выбрали chan_oh323, хотя приведенные ни-
(поддерживаемые кодеки, стабильность, совместимость). же настройки с небольшими изменениями будут работать
Поддерживается компанией inAccess Networks [2]. и с chan_h323.
! chan_h323 – отличительной особенностью данного драй-
вера является более тесная интеграция с Asterisk (ис- Устанавливаем chan_oh323
пользуется Asterisk-реализация протокола RTP), что поз- Для канальных драйверов Asterisk отсутствуют готовые би-
воляет достичь большей производительности по сравне- нарные пакеты, поэтому воспользуемся единственно воз-
нию с chan_oh323. Платой же за это является несколько можным способом установки – компиляцией из исходно-
меньшая функциональность. Так, например, chan_h323 го кода.
не имеет собственного буфера дрожания (jitter buffer) [3], При этом будем использовать машину следующей кон-
а также не поддерживает некоторые кодеки. фигурации:
! chan_ooh323c – драйвер компании Objective Systems ! CPU AthlonXP 1500+
Inc [4], основанный на их открытом H323 стеке – Objec- ! MB Epox 8KHA+ (VIA KT266A)
tive Open H.323 for C. И хотя количество поддерживае- ! 512 Мб RAM
мых кодеков и H323-настроек несколько меньше, чем у ! HDD 40 Гб IDE Samsung
конкурентов, драйвер вполне можно использовать. На ! Gentoo Linux Linux 2005.0 (ядро 2.6.12, gcc 3.4.3 и
данный момент статус драйвера – «beta», но со слов glibc 2.3.4)
разработчиков, модуль в скором времени должен вой-
дет в состав официальной версии Asterisk. Нам понадобятся следующие версии программ и биб-
! chan_woomera – драйвер, позволяющий связать Asterisk лиотек:
с сервером Woomera. На данный момент через woomera ! pwlib 1.6.6
можно совершать только H323-звонки, хотя в будущем ! openh323 1.13.5
разработчики обещают обеспечить поддержку универ- ! chan_oh323 0.6.6
сального уровня абстракции OPAL. ! Asterisk 1.0.9

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

Очень большое количество проблем при установке ка- стройку, а также внести соответствующие изменения в но-
нальных драйверов H323 возникает именно из-за исполь- мерной план.
зования других версий pwlib и openh323. Кроме того, у не- Параметры chan_oh323 хранятся в файле /etc/aster-
которых людей наблюдались трудности при использова- isk/oh323.conf. Итак, в контексте [general] определим сле-
нии готовых бинарных пакетов, входящих в состав у неко- дующие параметры (для остальных оставим значения по
торых дистрибутивов. умолчанию):
Взять нужные версии лучше всего с сайта inAccessNet-
works (к сожалению, у меня не получилось собрать openh323 с [general]
listenAddress=IP _ адрес _ интерфейса
сайта inAccessNetworks, поэтому я взял эту же версию библи- fastStart=yes
отеки из репозитория исходных кодов Gentoo) [5, 6, 7]. Итак, inBandDTMF=yes
gatekeeper=IP _ адрес _ GateKeeper
загружаем чуть меньше 4 Мб исходных кодов в /root/src/oh323 gatekeeperPassword=secret
и переходим к установке. Начинать необходимо с pwlib. context=generic-inc

# cd /root/src/oh323 Здесь мы указали:


# tar xfz ./pwlib-Janus _ patch4-src-tar.gz
# cd pwlib ! IP-адрес, который chan_oh323 будет использовать для
# ./conÞgure работы с H323-устройствами (очень полезно, если у
# make opt
# make install Linux-машины имеется несколько адресов в различных
сетях);
Оптимизированная версия pwlib установлена, перехо- ! IP-адрес GateKeeper, пароль, с которым мы будем ре-
дим к openh323. гистрироваться;
! контекст Asterisk, в который будут попадать все звонки,
# cd .. приходящие со стороны H323;
# tar xfz ./openh323-v1 _ 13 _ 5-src.tar.gz
# cd openh323 ! включили режим faststart для более быстрой установки
# ./conÞgure H323-соединений;
# make opt
# make install ! сообщили серверу, что тоновые сигналы (DTMF) необходи-
мо передавать внутри RTP-пакетов (inBandDTMF=yes).
Библиотека OpenH323 собирается достаточно долго
(в моем случае на это ушло чуть больше часа). Кроме того, Заметим, что приведенные значения параметров не яв-
во время компиляции вам понадобятся около 150 Мб дис- ляются «лучшими для всех случаев жизни», просто в мо-
кового пространства и 300 Мб swap. ей ситуации именно этот набор вызывает наименьшее ко-
Теперь перейдем к канальному драйверу chan_oh323: личество проблем.

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

Драйвер установлен. Запустим Asterisk с режимом кон-


соли (asterisk -cvvvvv) и выполним команду:

* CLI> show modules

Модуль chan_oh323 должен присутствовать в списке за-


груженных модулей (см. рис. 1).

Настраиваем chan_oh323
Прежде чем приступить к использованию chan_h323 в As-
terisk, нам необходимо предварительно произвести на- Рисунок 1. Список загруженных модулей Asterisk

№7, июль 2005 33


администрирование
Если провайдер предоставляет нам телефонные номера exten => _ 6 Dial(OH323/preÞx{EXTEN:1}@gw _ addr,20,rT)
для входящих звонков, запишем их в секцию [register]:
Здесь prefix – служебный номерной префикс провайдера
[register] IP-телефонии, а gw_addr – IP-адрес его H323-шлюза.
context=generic _ inc
alias=телефонный _ номер _ 1 _ от _ провайдера
alias=телефонный _ номер _ 2 _ от _ провайдера Выход в город
Как вы могли заметить, на данный момент наша система
Звонки, приходящие на указанные номера, будут по- обладает одним недостатком, несколько затрудняющим ее
падать в контекст generic_inc (при необходимости звон- широкое использование, – отсутствие связи с городской
ки на разные номера можно направить в различные кон- телефонной сетью. Действительно довольно сложно пред-
тексты). ставить себе ситуацию, в которой связь с ТФОП (или c уже
Для кодеков определим следующие параметры: существующей мини-АТС) не требовалась. Сейчас мы ис-
правим это недоразумение.
[codecs] Как вы помните из [3], существуют два основных спо-
codec=G729
frames=6 соба подключения к городской телефонной сети: аналого-
codec=G711U вый (через стандартный телефонный провод) и цифровой
frames=20
codec=G729A (например, 30 каналов через интерфейс E1). Также нам из-
frames=6 вестно, что «переводом» звонков из телефонной сети в VoIP
codec=G729B
frames=6 занимаются шлюзы. Так вот, с Asterisk можно не только ис-
codec=G729AB пользовать обычные шлюзы H323, SIP с портами FXO, FXS,
frames=6
codec=GSM0610 E1, но и специализированные модули выпускаемые специ-
frames=4 ально для Asterisk. Фактически они представляют собой
codec=G7231
frames=4 PCI-платы с соответствующими разъемами, необходимой
электроникой «на борту», а также драйверами, позволяю-
Данные настройки определяют количество голосовых щими всему этому добру работать с Asterisk.
кадров, упаковываемых в один IP-пакет. Значение по умол-
чанию («1») слишком расточительно, поэтому поставим В город вместе с Digium
здесь типичные значения для голосового оборудования Наиболее известным (но не единственным [8]) производи-
H323 – «4,6». Заданные параметры будут применены по- телем таких плат является компания Digium [9] – основной
сле следующего перезапуска Asterisk (см. «Перезагрузка спонсор Open Source-проекта Asterisk. Спектр выпускаемых
конфигурации»). Перейдем к изменениям номерного пла- ею плат достаточно велик – от однопортовых FXS и FXO
на. Для входящих звонков (со стороны H323) подойдет кон- адаптеров, до модулей с четырьмя интерфейсами E1/T1.
текст, который мы создавали в прошлый раз (ведь по боль- Платы с аналоговыми портами наиболее привлекательны
шому счету нам все равно посредством какой технологии для малых предприятий (2 платы 4FXO = 8 аналоговых ли-
до нас дозвонились): ний (рис. 2)), цифровые модули наиболее интересны сред-
ним предприятиям (1 плата 4E1 – 120 цифровых каналов!).
[generic-inc]
exten => s,1,Wait, 1
exten => s, 2, Answer
exten => s,3, BackGround(local-welcomе)
exten => s,4, WaitExten
exten => 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, VoiceMailMain
exten=> 8500,n, Hangup Рисунок 2. Модуль Digum TDM22B (2 FXO + 2 FXS)
С точки зрения стоимости особенно привлекательны-
А вот для исходящих звонков потребуются некоторые из- ми являются платы Digium Wildcard X100P/X101P. С ними
менения. Добавим в контекст [office] следующую запись: связана одна интересная история. Первоначально Wild-
card X100P/X101P продавалась Digium по цене около 100$.
exten => _ 6 Dial(OH323/{EXTEN:1},20,rT) Однако через какое-то время пользователи заметили, что
на самом деле эти платы есть ни что иное, как обычные
При наборе номера с префиксом «6» звонок будет осу- PCI-софт-модемы на широко распространенных чипсетах
ществляться с помощью chan_oh323, т.е. согласно номерно- (Intel 537PU, 537PG, Ambient MD3200, Motorola 62802-51,
му плану провайдера определенному на его GateKeeper. первые 3 определятся как X101P или generic clone, пос-
Если же провайдер не использует Getekeeper (схема ледний как X100P), продаваемые в обычном компьютер-
терминации на шлюз), то в файле oh323.conf необходи- ном магазине за 10-15$. После того как эта информация
мо указать: стала общеизвестной, Digium ничего не оставалось, кро-
ме как свернуть продажи линейки X100P/X101P (в пос-
gatekeeper=DISABLE ледствии ее место занял внешний модуль IAXy). Впрочем,
это не означает, что остальные поступили также. Наобо-
А в номерном плане написать так: рот, во многих online-магазинах эту плату (X100P, X101P

34
администрирование
или их клоны) по-прежнему можно купить по цене 10-15$. Первая строчка означает, что для платы 1 необходи-
К сожалению, в России софт-модемы на нужных чипсетах мо использовать сигнализацию FXS loop-start (в Asterisk
не продаются в широкой рознице (у нас более популяр- для плат FXO используется сигнализация FXS, и, наобо-
ны модемы на микросхемах Conexant и Lucent, а не Intel и рот; если при указанных настройках сервер не будет опре-
Motorola), поэтому я заказал эту плату (X101P) через Ин- делять сигнал «занято», попробуйте другие разновиднос-
тернет [10, 11]. Итак, вставим модем в компьютер и на- ти fxs-сигнализации: fxs_ks, fxs_gs). Если плат в системе
строим его с Asterisk. несколько (например, две), то в первой строчке нужно на-
Первое, что нам необходимо сделать, – убедиться, что писать fxsks=1-2.
модем определился системой. Для этого выполним ко- Строки 2 и 3 определяют параметры телефонной сети
манду: для используемого оборудования (частоты тоновых сигна-
лов, их длительность и т. д.). К сожалению, в списке доступ-
# lspci ных стран России нет, поэтому, для того чтобы в вашем кон-
кретном случае все заработало, возможно, придется пере-
Если среди вывода этой утилиты присутствует строч- брать несколько стран. Список всех доступных вариантов
ка, похожая на эту: проще всего посмотреть в исходном тексте – файл zoneda-
ta.c библиотеки zaptel.
0000:00:09.0 Network controller: Tiger Jet Network Inc. Intel 537
Следующим шагом при настройке нашего сервера яв-
можете считать, что ядро Linux PCI-плату увидело и можно ляется определение параметров карты в файле /etc/aster-
пробовать загружать ее драйверы: isk/zapata.conf. Выбор значения того или иного парамет-
ра определяется конкретной АТС, к которой мы подклю-
# modprobe zaptel чаем Asterisk. Как известно, в России могут встречаться
# modprobe wcfxo
различные типы АТС. Привести универсальную конфигу-
Если модули загрузились без ошибок, то в /var/log/mes- рацию, подходящую для всех случаев жизни, достаточно
sages мы увидим следующее: сложно, поэтому ограничимся описанием двух наиболее
типичных – с импульсным набором (для старых АТС), с то-
Found a Wildcard FXO: Generic Clone
новым набором (для более-менее новых АТС). Итак, вна-
Данная строчка является лучшей иллюстрацией того, чале определим общие параметры, подходящие практи-
что с «железом» у нас все в порядке. чески для всех АТС:
Однако прежде чем перейти к настройке Asterisk оста-
новимся на еще одном важном моменте. Дело в том, что [channels]
context=[generic-inc]
платы Digium реализуют «телефонный» интерфейс (FXO, signalling=fxs _ ls
FXS, E1, T1) программно (в zaptel-драйвере), используя для group=1
callgroup=1
этого вычислительные ресурсы компьютера (в то время как pickupgroup=1
производители других систем телефонии используют спе- busydetect=yes
busycount=5
циализированные (и более дорогие) сигнальные процессо- channel=1
ры – DSP). При этом ввиду специфики задачи (быстрая об-
работка сигналов) работа с платой ведется в режиме пре- Замечание. Приводимые параметры сгруппированы для
рываний. Поэтому для нормальной работы очень важно на- более удобного изложения. При фактическом редактиро-
строить систему так, чтобы платы Digium ни с кем не дели- вании файла Zapata.conf настоятельно рекомендуется со-
ли одно прерывание, в противном случае возможны ухуд- хранять порядок, принятый в файле.
шения качества звука. Посмотрим, как с этим обстоит си- Итак, мы задали контекст, в который будут попадать все
туация у нас: телефонные звонки, приходящие со стороны ТФОП. Опре-
делили тип сигнализации, используемой Asterisk при рабо-
# cat /proc/interrupts те с FXO-портом.
0: 384085652 XT-PIC timer Кроме того, мы создали группу каналов (состоящую из
1:
2:
287894
0
XT-PIC
XT-PIC
i8042
cascade
одной телефонной линии), включили распознавание сиг-
8: 2 XT-PIC rtc нала «занято» (параметр busycount определяет количест-
9: 0 XT-PIC acpi
10: 181360 XT-PIC wcfxo во коротких гудков, необходимое для того, чтобы Asterisk
11: 48942244 XT-PIC hci_hcd, uhci_hcd, uhci_hcd, eth0 освободил линию), а также разрешили перехват звонков
12: 2690249 XT-PIC i8042
14: 810676 XT-PIC ide0 с ТФОП.
15:
NMI:
699164
0
XT-PIC ide1
Теперь перейдем к параметрам, определяемым в зави-
LOC: 0 симости от возможностей конкретной АТС:
ERR: 0

Все нормально, плата монопольно использует прерыва- callerid=asreceived


callprogres=yes
ние 10. Перейдем к настройке Asterisk. Первым делом от- usecallerid=yes
редактируем файл /etc/zatel.conf: usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
fxsls=1 transfer=yes
loadzone=us canpark=yes
defaultzone=us cancallforward=yes

№7, июль 2005 35


администрирование
Первой строкой мы сказали, что сигналы «европейского exten => s,4, Read(ext)
exten => s,5, Dial(ZAP/g1/${ext:1},20,rT)
АОН», приходящие из города, нужно передавать в Asterisk
без изменений. Вторая строка включает отслеживание со- [ofÞce]
exten => 101,1,Goto(pstn-dialout,s,1)
стояния линии (сигналы вызова, ответ, занято) при звонках.
(На данный момент эта опция является эксперименталь- Таким образом, при наборе номера 101 Asterisk перей-
ной и может работать некорректно). Следующие 3 строки дет в контекст pstn-dialout, зачитает приветствие pstn-ann-
актуальны, если телефон, подключенный к данной линии, ounce (которое необходимо предварительно записать), по-
может нормально работать с flash (извещение о входящем сле чего совершит звонок в город по введенному нами но-
вызове, конференц-связь, АОН должны поддерживаться и меру. Подобную схему можно с успехом использовать и для
быть активизированы на АТС). Последние два параметра других технологий (H323, SIP).
разрешают парковку и передачу звонков с ТФОП.
Заметим, что приведенные выше настройки актуальны Выход через SIP-шлюз
для более-менее современных АТС (электронные, цифро- К сожалению, далеко не всегда имеется возможность ис-
вые). Для их престарелых собратьев (координатных, ша- пользования оборудования Digium. Например, в ввиду фи-
говых, декадно-шаговых) вышеперечисленные параме- зических ограничений иногда бывает несколько затрудни-
тры, скорее всего, придется установить в «no». Кроме то- тельно установить PCI-платы в стандартные стоечные сер-
го, для активизации импульсного набора нужно будет до- веры (1U, 2U). Кроме того, рынок оборудования IP-телефо-
бавить следующую строчку: нии в России все еще находится в состоянии, близком к за-
чаточному, и найти в продаже платы Digium по разумным
pulsedial=yes ценам может быть несколько проблематичным.
Для решения этих проблем рассмотрим альтернативный
В независимости от АТС нам, скорее всего, понадобит- вариант сопряжения Asterisk с городской сетью – c помощью
ся включить подавление «эха» для zaptel-каналов. Для это- «внешних» голосовых шлюзов. Теоретически совместно с
го добавим следующие две строчки: Asterisk можно использовать любые из шлюзов, поддержи-
вающих протоколы SIP/H323/SCCP, однако, по моему мне-
echocancel=yes нию, на практике совместно с Asterisk лучше использовать
echocancelwhenbridging=yes
шлюзы c протоколом SIP. Наиболее известными производи-
Если же с помощью этих настроек полностью избавить- телями таких устройств (совместимых с Asterisk) являются –
ся от эха не удается, можно дополнительно задействовать Cisco, Mediatrix, Quintum, AddPac, VegaStream и D-Link.
следующие: В качестве примера рассмотрим сопряжение Asterisk с
городской сетью с использованием шлюза AddPac AP200D.
echotraining=yes Данный шлюз представляет собой отдельное устройство,
txgain=0.0
rxgain=0.0 имеющее 2 порта FXO (рис. 3).

Первой строкой мы включаем режим тренировки эхопо-


давления (полезно, если «эхо» регулярно слышно в нача-
ле разговора), а последними двумя задаем усиление для
входного и выходного сигналов. Для определения конкрет-
ных значений последних можно воспользоваться утилитой Рисунок 3. Шлюз IP-телефонии AddPac AP200D (2FXO)
ztmonitor, входящей в модуль zaptel. Устройство поддерживает все наиболее популярные
Перейдем к настройке номерного плана. В качестве способы конфигурации (console, telnet, web, EMS), а его
префикса для выхода в город будем использовать цифру командный интерфейс очень сильно похож на интерфейс
«5». В уже знакомый нам контекст [office] добавим следу- устройств Cisco (таким образом, с некоторыми поправками
ющую строку: приведенное ниже применимо и к голосовому оборудова-
нию Cisco). Для базовой конфигурации устройства необхо-
exten=> _ 5.,1,Dial(ZAP/g1/EXTEN:1,20,rT) димо определить сетевые и голосовые параметры. И если
с первыми все достаточно просто (нужно всего лишь опре-
Этим мы указали Asterisk, что если все номера, начина- делить стандартные настройки – IP-адрес, маску подсети и
ющиеся с цифры 6, должны передаваться на группу кана- маршрут по умолчанию), то со вторыми могут возникнуть
лов 1 zaptel-интерфейса. Первая цифра набранного номе- затруднения. Остановимся на них более подробно.
ра будет отбрасываться сервером Asterisk. При описании голосовых параметров ключевым являет-
Необходимо заметить, что способ маршрутизации звон- ся понятие dial-peer – точка, участвующая в голосовом со-
ков с использованием префиксов не является единствен- единении. Существует два типа dial-peer (см. рис. 4):
ным. Так ничто не мешает использовать нам следующую ! POTSdial-peer – описывает параметры соединения с
конструкцию: традиционной телефонной сетью. POTS dial-peer «при-
вязываются» к аппаратным портам (FXO, FXS) шлюза.
[pstn-dialout]
exten => s,1,Wait, 1
! VOIPdial-peer – описывает параметры соединения с VoIP-
exten => s,2, Answer сетью. Для простоты понимания VOIP dial-peer можно
exten => s,3, BackGround(pstn-announce) ассоциировать с Ethernet-разъемом шлюза.

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

Запись звуков *CLI > reload


При создании голосовых меню часто возникает необходи-
мость использования собственных файлов озвучки. Зву- Ежедневная перезагрузка
ковые файлы, используемые в Asterisk, хранятся в фор- Некоторые пользователи [13] отмечали проблемы с утечка-
мате gsm. Наиболее просто и быстро записать такие фай- ми памяти при очень интенсивном использовании Asterisk.
лы можно с помощью самого Asterisk. Для этого в номер- Эта проблема в той или иной степени присуща всем про-
ном плане можно создать специальный контекст со следу- дуктам и вызвана ошибками в исходном коде. Безусловно,
ющим содержанием: самым правильным способом ее решения является исправ-
ление исходного кода. Однако в качестве временной меры
[gsm-record] (до тех пор пока ошибки в коде не будут исправлены разра-
exten => 150,1,Wait(2)
exten => 150,2,Record(testrecord:gsm) ботчиками) можно предложить регулярно (для профилак-
exten => 150,3,Wait(2) тики) перезапускать сервер с Asterisk в свободное время,
exten => 150,4,Hangup
exten => 151,1,Playback(testrecord2) например, ночью. Для этого можно добавить в файл /etc/
exten => 151,2,Wait(2) crontab строку следующего содержания:
exten => 151,3,Hangup

Позвонив на номер 150, мы сможем наговорить необхо- 0 0 * * * root /etc/init/asterisk restart> /dev/nu
димый текст, который будет сохранен в стандартной папке
звуков Asterisk (/var/lib/asterisk/sound) в файле ivrrecording. Восстановление после сбоев
gsm. Прослушать содержимое этого файла можно, позво- Не исключено, что во время работы процесс Asterisk «совер-
нив по номеру 151. шит недопустимую операцию и будет закрыт». (И хотя такая
Помимо записи с помощью Asterisk можно использо- ситуация для STABLE-версии является из ряда вон выходя-
вать специальные утилиты конвертации форматов, напри- щей, не учитывать ее появление для «боевой» системы все
мер sox [12]: же нельзя.) Как это отразится на пользователях?
Думаю, что не нужно быть пророком, чтобы понимать,
# sox inputÞle.wav -r 8000 -c 1 outputÞle.gsm resample -ql что в этом случае связи не будет. Возможным решением
этой проблемы может быть сокращение общего времени
Перезагрузка конфигурации простоя сервиса путем его быстрого перезапуска. Для As-
Как вы могли заметить, после редактирования конфигура- terisk эта возможность является практически стандартной –
ционных файлов мы всегда перезапускали сервер. Действи- достаточно просто для запуска использовать файл asterisk_
тельно для некоторых модулей (например, zaptel и oh323) safe (вместо asterisk). Теперь при «авариях» сервис будет
такая операция обязательна. Однако при незначительных перезапускаться автоматически. В принципе аналогично-
изменениях (добавление нового устройства, изменение но- го результата можно добиться и с помощью простого shell-
мерного плана и т. д.) полного перезапуска сервера можно скрипта, выполняемого по cron.

Для минимальной настройки нам понадобится сконфи- Определим для него следующие параметры:
гурировать два dial-peer (по одному каждого типа), а также
определить правила маршрутизации между ними внутри dial-peer voice 0 pots
destination-pattern 9T
нашего шлюза. POTS dial-peer «привяжем» к FXO-линии, а port 0/0
VOIP dial-peer «настроим» на Asterisk. Звонок из ТФОП на user-name 100
user-password potsfxopwd1
наш сервер будут делаться с помощью донабора внутрен-
него номера. При наборе городских номеров из Asterisk бу- Только что мы сказали, что все звонки, приходящие на
дем добавлять префикс «9» перед исходным номером. шлюз и начинающиеся с номера «9», должны уходить на
Для конфигурирования воспользуемся telnet-интер- первый порт FXO, ассоциированный с dial-peer 0. При звон-
фейсом шлюза. Для этого подключимся к устройству и ках из ТФОП на указанный FXO-порт шлюз будет аутен-
перейдем в интерфейс конфигурирования с помощью ко- тифицироваться на Asterisk с использованием указанных
манды conf: имени пользователя и пароля. Правда, для этого устрой-
ству предварительно необходимо указать, где именно на-
AP200# conf ходится Asterisk, которому будут передаваться звонки из
Enter configuration commands, one per line. End with CNTL/Z ТФОП. Опишем VOIP dial-peer:
AP200(config)#
AP200(conÞg)# dial-peer voice 1000 voip
Создадим POTS-dial-peer с номером 0 (для второго пор- AP200(config-dialpeer-voip-1000)#
та нужно произвести аналогичные действия):
Определим следующие параметры:
AP200(conÞg)# dial-peer voice 0 pots
AP200(config-dialpeer-pots-0)# dial-peer voice 1000 voip

№7, июль 2005 37


администрирование
destination-pattern T secret= potsfxopwd1
session target sip-server dtmfmode=rfc2833
session protocol sip context=generic-inc
dtmf-relay rtp-2833
no vad
Звонки из ТФОП будем направлять в наш стандартный
Перейдем в контекст определения настроек sip user- контекст для входящих звонков – generic_inc.
agent: Для исходящих звонков добавим в контекст [office] сле-
дующую строчку:
AP200(conÞg)# sip-ua
exten => _ 9,Dial(SIP/EXTEN@100,20,rT)
AP200(config-sip-ua)#

Зададим следующие параметры: Перезапустим Asterisk.Через некоторое время шлюз за-


регистрируется на сервере, о чем можно будет узнать, вы-
sip-ua полнив на нем следующую команду:
user-register
sip-server 192.168.0.20
register e164 AP200# show sip

Proxyserver Registration Information


Этим мы сказали шлюзу, что SIP-сервер находится по proxyserver registration option = e164
Proxyserver list :
адресу 192.168.0.20. и при регистрации на нем необходимо ---------------------------------------------------------------
использовать e164-номер (международный стандарт, опре- Server address Port Priority Status
---------------------------------------------------------------
деляющий правила нумерации абонентов в телефонных се- 192.168.0.20 5060 128 Registered(E.164)
тях) и пароль, указанными для POTS dial-peer. Теперь разбе-
Proxyserver registration status :
ремся со «служебным» префиксом «9». Очевидно, что пере- ------------------------------------------------
давать его в ТФОП нельзя, поэтому его необходимо отбра- UserName Regist Status
------------------------------------------------
сывать. Делать это можно как на Asterisk (см. выше приме- 100 yes Registered
ры для межгорода и плат Digium), так и непосредственно на
шлюзе. Воспользуемся вторым способом. Для этого созда- Теперь мы можем звонить не только нашим соседям по
дим translation-rule и применим его к POTS dial-peer: офису, но и любым абонентам городской телефонной се-
ти!
AP200(conÞg)# translation-rule 0
AP200(conÞg-translation-rule#0)# rule 0 9T T
AP200(conÞg-translation-rule#0)# exit Заключение
AP200(conÞg)# dial-peer voice 0 Оглядываясь на проделанное, можно смело сказать – те-
AP200(conÞg-dialpeer-pots-0)# translate-outgoing ↵
called-number 0 перь у нас есть полноценная (по функциональности) мини-
АТС. Изучение Asterisk на этом не заканчивается! В следу-
Теперь при наборе номера через первый голосовой порт ющий раз мы более подробно остановимся на способах об-
FXO префикс «9» будет отбрасываться. легчения управления сервером, рассмотрев установку раз-
личных веб-интерфейсов.
До встречи!

Литература и ссылки:
1. Платов М.В. Asterisk и Linux: миссия IP-телефония. – Жур-
нал «Системный администратор», №6, 2005 г. – 12-19 c.
2. http://www.inaccessnetworks.com/projects/asterisk-
Рисунок 4. POTS и VOIP dial-peer oh323.
Итак, с настройками шлюза мы закончили. Применим 3. Платов М. Что важно знать об IP-телефонии. – Журнал
конфигурацию и перейдем к настройке Asterisk: «Системный администратор», №5, 2005 г. – 20-25 c.
4. http://obj-sys.com/open/index.shtml.
AP200(conÞg)# write 5. http://www.inaccessnetworks.com/ian/projects/asterisk-
Do you want to WRITE configuration ? [y|n] y oh323/Libraries/pwlib-Janus_patch4-src-tar.gz.
Writing configuration....done 6. ftp://ftp.gtlib.cc.gatech.edu/pub/gentoo/distfiles/openh323-
AP200(config)# reboot
System Reboot... v1_13_5-src.tar.gz.
7. http://www.inaccessnetworks.com/projects/asterisk-oh323/
Для того чтобы использовать шлюз из Asterisk, нам по- download/asterisk-oh323-0.6.6.tar.gz.
надобится создать для него учетную запись SIP, а также 8. http://www.voipsupply.com/index.php?cPath=99.
внести необходимые изменения в номерной план. Добавим 9. http:/www.digium.com.
в файл /etc/asterisk/sip.conf следующие строки: 10. http://www.goods2world.com.
11. http://www.iaxtalk.com.
[100] ;AP200 13. http://sox.sourceforge.net.
type=friend
host=dynamic 14. http://www.voip-info.org/tiki-index.php?page=Asterisk+adm
username=100 inistration.

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

Free
reeBSD
BSD TIPS: РАБОТАЕМ С TFTP
Для некоторых задач обмена
файлами по сети многие
возможности протокола FTP
оказываются избыточными.
Чтобы не тратить ресурсы
на их поддержку, был
разработан протокол TFTP.

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

П
ротокол TFTP (Trivial File Transfer Protocol – триви- по запросу на чтение или запись, после завершения опе-
альный протокол передачи файлов) благодаря сво- рации оно разрывается. С этой точки зрения TFTP больше
ей предельной простоте довольно часто использу- похож на HTTP, также работающий без поддержания по-
ется в различном оборудовании (маршрутизаторах, ком- стоянного соединения.
мутаторах, модулях DSLAM и т. п.). Его удобно применять В качестве стандартного порта для протокола TFTP
для обмена файлами внутри локальной сети, при необходи- определен порт 69. Основным транспортным протоколом
мости он легко может быть интегрирован в разрабатывае- для TFTP является UDP, однако работа поверх TCP также
мую программу. В последнее время все большую популяр- возможна. Чтобы прочитать файл, на этот порт посылается
ность приобретают бездисковые рабочие станции, перво- запрос на чтение, содержащий код операции (opcode, рав-
начальная загрузка которых выполняется по сети также с ный 1 (RRQ)), имя запрашиваемого файла и режим переда-
использованием протокола TFTP. В данной статье мы рас- чи, который может быть «netascii» или «octet». Стандартом
смотрим реализацию TFTP в системе FreeBSD. также определен режим «mail», предназначенный для пере-
дачи сообщений электронной почты, но он считается уста-
Протокол TFTP (a.k.a. RFC1350) ревшим и не рекомендуется к применению. Эти значения
Сначала коротко рассмотрим сам протокол, как он опреде- соответствуют тому, что обычно именуется «текстовым» и
лен в документе RFC1350. Поскольку главное требование «двоичным» режимами: в режиме netascii предусматривает-
к протоколу – простота, то в нем поддерживается лишь не- ся обработка управляющих символов (например, перевода
обходимый минимум функций: возможность чтения файла строки) в соответствии со стандартами, принятыми на той
с удаленного хоста и записи файла на хост. Протоколом не или иной платформе; в режиме octet данные должны быть
предусматривается ни аутентификация/авторизация поль- переданы в «сыром» виде, без какой-либо обработки.
зователя, ни навигация по каталогам, ни даже просмотр со- В ответ на запрос, если нужный файл существует и до-
держимого каталога. ступен для чтения, сервер отсылает первую порцию дан-
Нет в TFTP и отдельной процедуры соединения, как это ных, содержащую opcode 3 «DATA», номер блока (1) и соб-
происходит в случае с FTP – соединение устанавливается ственно данные. Данные передаются блоками по 512 байт,

№7, июль 2005 39


администрирование
после отправки каждого из них сервер должен дождать- Verbose mode on.
ся подтверждения от клиента (opcode 4, ACK). Если под- tftp> conn localhost
tftp> status
тверждение не будет получено, то через определенный пе- Connected to localhost.
риод времени сервер должен повторить отправку послед- Mode: netascii Verbose: on Tracing: on
него блока. Если подтверждение так и не придет в течение Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
tftp> get config
тайм-аута, заданного для сеанса связи, то соединение раз- getting from localhost:config to config [netascii]
рывается. Вообще нужно иметь в виду, что тайм-ауты игра- sent RRQ <file=config, mode=netascii>
sent RRQ <file=config, mode=netascii>
ют очень важную роль в TFTP-соединении. sent RRQ <file=config, mode=netascii>
Блок данных менее 512 байт рассматривается как по- sent RRQ <file=config, mode=netascii>
следний, и соединение после его получения разрывает- sent RRQ <file=config, mode=netascii>
Transfer timed out.
ся. Если размер файла кратен 512 и последний блок име-
ет размер также 512 байт, то должен быть отправлен еще На приведенном выше листинге показана попытка счи-
один блок нулевой длины. тать файл при неработающем сервере. Как видите, клиент
Запись файла выполняется аналогично, с той разницей, не обнаруживает наличие проблемы и через каждые 5 се-
что в ответ на запрос о записи (opcode 2, WRQ) сервер от- кунд (параметр Rexmt-interval) повторяет попытки устано-
сылает подтверждение с номером блока 0. вить соединение, передавая запрос RRQ и ожидая пер-
Для оповещения удаленной стороны о возникновении вый блок данных. Спустя 25 секунд (Max-timeout) эти по-
ошибки используются специальные пакеты с opcode = 5 пытки прекращаются. Обратите внимание, что приглаше-
(ERROR). ние вы получите в любом случае, независимо от того, за-
Как видите, протокол отводит два байта для указания пущен ли на указанном узле TFTP-сервер или нет. Как бы-
номера отсылаемого блока, что накладывает ограниче- ло описано выше, попытка установить соединение выпол-
ние на размер передаваемого файла в 32 Мб. Существу- няется только при отправке запроса на чтение или запись.
ют документы RFC 1782 – 1785, расширяющие возможно- До этого момента клиент ничего не знает о наличии серве-
сти TFTP. В частности, RFC1783 определяет дополнитель- ра на удаленной машине.
ный параметр blksize, позволяющий задать размер блока, Пример успешной записи файла на сервер выглядит
отличный от 512 байт. Помимо увеличения максимального так (включена трассировка):
размера файла данная возможность также способствует
увеличению скорости передачи в средах с большим зна- tftp> verbose
Verbose mode on.
чением MTU. tftp> trace
Packet tracing on.
Клиент tftp tftp> put messages
putting messages to test.ru:messages [netascii]
Система FreeBSD включает в себя как TFTP-сервер (tftpd), sent WRQ <file=messages, mode=netascii>
так и утилиту tftp, выполняющую функции клиента. Про- received ACK <block=0>
sent DATA <block=1, 512 bytes>
грамма tftp представляет собой интерактивную оболочку received ACK <block=1>
для работы с TFTP-серверами (в отличие от одноименной sent DATA <block=2, 512 bytes>
received ACK <block=2>
утилиты в Windows, которая требует в качестве параметра 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>
serg$ tftp
tftp> ?
sent DATA <block=7, 512 bytes>
Команды могут сокращаться, пока сохраняется уникальность. received ACK <block=7>
sent DATA <block=8, 512 bytes>
connect указать сервер, с которым будет устанавливаться соединение received ACK <block=8>
mode установить режим передачи (ascii|netascii|binary|image|octet) sent DATA <block=9, 120 bytes>
put отправить файл на сервер received ACK <block=9>
get получить файл с сервера Sent 4216 bytes in 0.1 seconds [337280 bits/sec]
quit выйти из tftp
verbose
trace
вкл./откл. подробные сообщения
вкл./откл. трассировку пакетов в ходе обмена с сервером
Клиент tftp не поддерживает согласование размера
status показать текущие настройки блока по RFC1783, поэтому размер передаваемого файла
binary
ascii
включить режим обмена octet
включить режим обмена netascii
ограничивается значением 32 Мб. На трассировке это вы-
rexmt установить таймаут, используемый для каждого пакета глядит следующим образом:
timeout установить общий таймаут сеанса
? вывести на экран эту справку .. .. .. ..
sent DATA <block=65534, 512 bytes>
Установка соединения и обмен данными обеспечивает- received ACK <block=65534>
sent DATA <block=65535, 512 bytes>
ся командами put и get, все остальные служат для настрой- received ACK <block=65535>
ки поведения клиента: sent WRQ <file=messages, mode=netascii>
sent WRQ <file=messages, mode=netascii>
tftp> trace received ACK <block=65535>
Packet tracing on. sent WRQ <file=messages, mode=netascii>
tftp> verbose received ACK <block=65535>

40
администрирование
sent WRQ <file=messages, mode=netascii> торым руководствуется inetd, решая, запускать ли соответ-
received ACK <block=65535> ствующий процесс при попытке установить соединение на
sent WRQ <file=messages, mode=netascii>
received ACK <block=65535>
том или ином порту или нет.
Transfer timed out. Если нужно позволить клиентам запись любых файлов,
то рекомендуется использовать опцию -w совместно с -c,
То есть клиент (рассматривается отправка файла), ото- чтобы такая запись была разрешена только с указанных из-
слав блок номер 65535, не может отослать следующий из- вестных адресов. Однако не забывайте о возможности под-
за переполнения счетчика и повторно отправляет запрос на мены IP-адреса отправителя, что открывает возможность
запись WRQ. Сервер же ожидает следующий блок, повто- для атаки типа «Отказ в обслуживании» путем переполне-
ряя периодически подтверждение блока 65535. По истече- ния соответствующей файловой системы.
нии тайм-аута соединение разрывается. При этом переда- Также рекомендуется с файлов, которые предназначе-
ваемый файл сохраняется на сервере частично (он вроде ны только для считывания, снимать права на запись. Если
бы и есть, но попытка его использовать приведет к ошиб- файл требуется записывать на сервер, но он не предназна-
ке). Таким образом, не следует использовать TFTP для об- чен для чтения другими пользователями, можно поставить
мена большими файлами. на него права 222 (-w--w--w-). При включенной опции –w это
можно автоматизировать с помощью ключа «-U mask», кото-
Сервер tftpd рый определяет маску для создаваемых (самим процессом
Несмотря на букву «d» в конце имени, tftpd не является де- tftpd по запросу на запись) файлов. Для описанного выше
моном, его запуск выполняется супердемоном inetd при по- примера следует указать «-U 555» – в этом случае каждый
явлении запроса на порту 69. По умолчанию соответству- созданный по запросу клиента файл получит разрешение
ющая строка в /etc/inetd.conf закомментирована, и для ак- только на запись и не сможет быть никем прочитан (кроме
тивизации сервера комментарий нужно удалить и переза- администратора сервера, разумеется).
пустить процесс inetd.
Все настройки поведения сервера выполняются с по- Обмен файлами
мощью ключей командной строки путем редактирования с маршрутизатором CISCO
файла /etc/inetd.conf. Наиболее часто используются сле- В качестве примера рассмотрим применение TFTP для со-
дующие опции: хранения на сервер конфигурации с CISCO (например, для
! -s <каталог>: после запуска tftpd установит указанный более удобного редактирования или как резервную копию)
каталог как корневой, используя функцию chroot. Если и последующую загрузку на CISCO с сервера.
не указан пользователь (см. опцию –u), то процесс по- Итак, предполагая, что обмен с CISCO выполняется по
лучает права nobody. изолированной сети 10.100.100.0/24, а интересующие нас
! -c: позволяет привязывать корневой каталог сервера к устройства имеют адреса 10.100.100.1 и 10.100.100.2, запуск
IP-адресу удаленного хоста. Используется совместно с tftpd удобно выполнять со следующими ключами:
опцией –s, указывающей базовый каталог. Например,
если базовый каталог определен как /var/tftp, то при по- tftpd -clw -s /var/tftp/cisco -u tftp
лучении запроса с адреса 1.2.3.4 корневым каталогом
будет являться /var/tftp/1.2.3.4. Если данный каталог от- Создаем каталог /var/tftp/cisco, и в нем две директо-
сутствует, соединение разрывается. рии 10.100.100.1 и 10.100.100.2, владельцем которых дела-
! -C: аналогична ключу -c, но при отсутствии каталога, ем пользователя tftp (создать его придется вручную). Раз-
соответствующего адресу клиента, корневым катало- решаем прохождение соединений на порт 69 с указанных
гом становится базовый. адресов через все запущенные в системе пакетные филь-
! -l: включает режим протоколирования работы, исполь- тры. Теперь после перезапуска inetd (или перезагрузки сер-
зуя syslog (сообщения сохраняются как LOG_FTP). вера) tftpd готов к работе.
! -u <пользователь>: указывается имя непривилегирован- На CISCO копирование на сервер выполняется коман-
ного пользователя, с правами которого будет работать сер- дой copy:
вер после переключения в chroot. Пользователь должен Host>ena
быть задан по имени, использование UID недопустимо. Password:
! -w: разрешает создавать несуществующие файлы по Host #copy running-config tftp:
Address or name of remote host []? 10.100.100.254
запросу на запись. По умолчанию запись файла разре- Destination filename [host-confg]? config
шена только в том случае, если он существует и досту- !!!!!!
пен для записи пользователю, от имени которого рабо- 20693 bytes copied in 1.044 secs (19821 bytes/sec)

тает процесс tftpd. Аналогично можно загружать конфигурацию с сервера


на CISCO, поменяв местами аргументы команды copy.
Особое внимание следует уделить вопросу безопасно-
сти. Поскольку сам сервер tftpd не выполняет никаких про- Заключительное слово
верок авторизации, то доступ к нему необходимо ограни- Надеюсь, эта статья поможет вам эффективно использо-
чивать. Наиболее часто для этого используют брандмауэ- вать протокол TFTP в своей работе. Главное – не забывай-
ры, пропуская пакеты на 69-й порт только с разрешенных те о безопасности, которую приходится обеспечивать внеш-
узлов. Также может быть удобен файл /etc/hosts.allow, ко- ними по отношению к TFTP средствами.

№7, июль 2005 41


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

УСТАНАВЛИВАЕМ СВЯЗКУ POSTFIX + EXCHANGE

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


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

ВЛАДИМИР АГАПОВ

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

42
администрирование
щаетесь к себе, попутно думая, а что же проще: настро- ! В связи с тем, что название Windows-домена в AD часто
ить The Bat на работу с LDAP и найти какие-нибудь утили- не совпадает с почтовым доменом, необходимо вклю-
ты, позволяющие получить данный функционал, или снес- чить маскарадинг.
ти The Bat со всех машин, и поставить туда Outlook, закрыв ! Во избежание локальных эпидемий внутреннюю почту
глаза на резко упавшую в этом случае безопасность? По- также необходимо проверять на вирусы.
думав с полчасика, приходим к выводу: придется ставить
Outlook, и не только его, что было бы только половиной бе- Приступим к настройке Exchange
ды, но и Exchange в качестве почтового сервера. Посколь- Запускаем Exchange System Manager:
ку начальнику может прийти в голову и еще что-нибудь не- ! Разворачиваем «Administrative Group → company → Serv-
приличное, типа внутрикорпоративного документооборо- ers → Exchange → protocols SMTP». Открываем свойства
та. Вместо MS Exchange можно, конечно, использовать и default. На закладке «Access» выбираем «Relay Restric-
OpenXchange, Hula, Opengroupware и пр. Но мы остановим- tions» и записываем туда IP-адрес нашего Postfix-сер-
ся на первом варианте. вера. В некоторых случаях может потребоваться ука-
Скорее всего, у вас совершенно нет желания вывеши- зать подсети целиком. Например, в случае использова-
вать наружу машину с установленной на ней ОС Windows ния приложений, напрямую общающихся с SMTP-сер-
и Exchange в придачу. Значит, придется разделить функ- вером.
ции внешнего и внутреннего почтовых серверов. На внут- ! Там же, на закладке «Delivery», выбираем «Advanced»
реннем пусть себе крутится Exchange, а на внешнем пос- и указываем в поле «Smart Host» IP-адрес Postfix-сер-
тавим UNIX-подобную операционную систему и, например, вера в квадратных скобках.
Postfix в качестве почтового сервера. Вот из этих предпо- ! Здесь же, в поле «masquerade domain», указываем наш
сылок и будем исходить. почтовый домен, для того чтобы Exchange отправлял
Поставить и запустить эти два сервера – задача сама всю почту от имени этого домена.
по себе для новичка нетривиальная, но такой вариант нас ! Выбор антивирусного сканера под Exchange я остав-
не устраивает, в нашем случае необходимо, чтобы эти сер- ляю за вами, поскольку почти все крупные производи-
вера взаимодействовали между собой и прозрачно пропус- тели антивирусных продуктов имеют в своих линейках
кали почту в мир и обратно. такие решения.
В результате всех размышлений получается примерно
следующий список задач: Этих настроек на данный момент достаточно. Более де-
1. Установка на все рабочие машины Microsoft Office Out- тальную настройку и конфигурирование оставляю на ва-
look в качестве почтового клиента. ше усмотрение.
2. Установка на первый сервер (exchange) ОС Windows и
Microsoft Exchange (в данном документе будет подраз- Настраиваем Postfix для работы
умеваться версия 2003). с Exchange
3. Установка на второй сервер (gate) ОС из семейства UNIX Определимся, что мы ожидаем от Postfix.
и Postfix (FreeBSD 5.3 и postfix 2.2 соответственно). ! Принимать почту, пересылаемую ему Exchange и от-
4. Настройка Exchange для работы с Postfix правлять ее дальше в мир.
5. Настройка Postfix для работы с Exchange ! Проверять всю входящую и исходящую почту на виру-
6. Дополнительное конфигурирование для поддержки alias сы.
и прочего. ! Проверять всю входящую почту на наличие спама и вы-
ставлять ей соответствующие балы.
Пункты с 1-го по 3-й выходят за рамки обсуждения дан- ! Для экономии трафика необходимо проверять, есть ли
ной статьи, поэтому детально описывать их я не буду, а бо- получатель входящего письма в нашем домене, и в за-
лее подробно остановлюсь на пунктах 4, 5 и 6. висимости от результата либо принимать, либо отвер-
Одно из решений задачи уже было предложено в жур- гать письмо.
нале [1]. Мы же в отличие от него будем использовать ва- ! Пересылать все прошедшие проверку входящие пись-
риант проверки Postfix наличия почтового аккаунта в Win- ма на Exchange.
dows-домене перед приемом почты.
Прежде всего нам потребуется установить Postfix. Об
Настраиваем Exchange для работы этом достаточно много имеется информации в Интернете,
совместно с Postfix поэтому остановлюсь лишь на главных моментах. У нас
Для начала определимся, что именно мы хотим получить есть два варианта установки:
от Exchange в данной конфигурации: ! просто пересылать всю входящую почту внутрь сети, не
! Он должен получать почту, которую будет перенаправ- задумываясь, есть ли такой почтовый пользователь;
лять ему Postfix и доставлять ее в соответствующие по- ! предварительно проверять наличие пользователя в AD
чтовые ящики пользователей. и в случае его отсутствия не принимать почтовое сооб-
! Почта пользователей, отправляемая за пределы доме- щение.
на, должна попадать в Exchange и пересылаться им для
дальнейшей обработки на внутренний интерфейс gate По первому варианту вы можете посмотреть уже упо-
для дальнейшей отсылки ее в мир уже Postfix. минавшуюся здесь статью [1]. Однако я предпочел остано-

№7, июль 2005 43


администрирование
виться на втором варианте. Это позволит нам существен- ! Чтобы Postfix после всех проверок отправлял письмо
но сэкономить трафик и поможет уменьшить количество Exchange, добавим в main.conf:
приходящего спама.
Для начала установим LDAP-client. virtual _ transport = hash:/etc/postÞx/virtual _ transport
transport _ maps = hash:/etc/postÞx/virtual _ transport
# cd /usr/ports/net/openldap22-client/ и создадим файл /etc/postfix/virtual_transport:
# make install clean

Далее устанавливаем Postfix с поддержкой LDAP. Ес- company.ru smtp:[192.168.16.5]


ли вы собираете его из портов, отметьте соответствую-
щий пункт, в другом случае вам потребуется указать это где 192.168.16.5 – IP-адрес Exchange-сервера, а compa-
явно: ny.ru – домен, всю приходящую для которого почту сле-
дует пересылать на другой сервер. Не забываем после
# 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" postmap /etc/postÞx/virtual _ transport
# gmake install

Приступаем к конфигурированию Postfix Дополнительное конфигурирование


Для начала установите все минимально необходимые зна- Для полноценной работы нам, возможно, потребуется еще
чения. Что именно, можно узнать в документации на Post- несколько штрихов, а именно:
fix и в Интернете. ! Создать группы рассылок на Exchange. Для этого необ-
! Добавим в значение переменной «mynetworks» IP-ад- ходимо сделать следующее:
рес Exchange-сервера (например, 192.168.1.2/32). ! Создать группу распределения.
! В качестве антивирусного сканера я использую ClamAV. ! Создать почтовый аккаунт для этой группы.
Как его подключить к Postfix, можно прочитать в ста- ! Добавить в эту группу всех, кто должен быть подпи-
тье [2]. сан на эту рассылку.
! Как подключить SpamAssassin, можно прочитать там ! Разобраться, как можно сделать алиасы в Exchange.
же. Для этого можно использовать два варианта:
! Для проверки наличия учетной записи будем исполь- ! Создать в Active Directory дополнительные SMTP-за-
зовать LDAP-запросы к AD. Именно для этого мы и со- писи для каждого пользователя, которому необхо-
бирали Postfix с поддержкой LDAP. Внесем следующие димо прописать alias. Этот вариант проще и пред-
записи в main.conf: почтительнее.
! Там же можно создать запись типа CC для тех же це-
# имя Windows-домена лей.
ldapmap _ search _ base = dc=ofÞce, dc=company, dc=ru
# IP-адрес PDC
ldapmap _ server _ host = 192.168.16.1 На этом можно считать минимально необходимую на-
# LDAP-порт
ldapmap _ server _ port = 3268 стройку для работы данной связки законченной. Все воз-
ldap _ timeout = 60 можные ошибки и проблемы всегда возможно отследить
ldapmap _ query _ Þlter = (&(proxyAddresses=smtp:%s) ↵
(|(objectClass=user)(objectClass=group) ↵ в логах postfix, где все достаточно информативно пишет-
(objectClass=contact))) ся. Так же для обсуждения этой статьи и всех дополни-
ldapmap _ result _ Þlter = %s
ldapmap _ result _ attribute = canonicalName тельных вопросов существует специально созданный то-
ldapmap _ special _ result _ attribute = пик на форуме [3].
ldapmap _ scope = sub
ldapmap _ bind = yes Данный вариант является рабочим, проверен на офисе
ldapmap _ bind _ dn = ldapquery@ofÞce.company.ru компании. Но у него есть как минимум один недостаток – он
ldapmap _ bind _ pw = LdaPassworD
ldapmap _ cache = no потенциально не защищен от атак типа DoS на AD, в случае
ldapmap _ dereference = 0 большого количества одновременных внешних SMTP-сес-
ldapmap _ domain = ofÞce.company.ru
ldapmap _ debuglevel = 0 сий. Чтобы этого избежать, можно либо настроить в Post-
virtual _ mailbox _ maps = ldap:ldapmap fix ограничения на количество одновременных сессий, ли-
virtual _ mailbox _ domains = company.ru
бо скриптом по cron забирать информацию из AD и скла-
Для того чтобы у Postfix были права на выборку инфор- дывать ее на машине с Postfix. Но это тема уже совсем дру-
мации о пользователях домена, заведем в домене но- гой статьи.
вого пользователя ldapquery с паролем LdaPassworD.
В результате данной процедуры Postfix будет опраши- Литература, ссылки:
вать домен на наличие пользователя с заведенным поч- 1. Полянский И. Postfix как шлюз для Exchange. – Журнал
товым ящиком типа user@company.ru. В случае положи- «Системный администратор», №5, 2004 г. – 34-37 с.
тельного ответа письмо будет приниматься для дальней- 2. Почтовая система на базе Postfix, PostgreSQL, с филь-
шей доставки, в случае отрицательного – отвергаться трацией вирусов и спама на FreeBSD 5.3 – www.deepn-
с кодом, указанным в переменной unknown_local_recip- et.ru, раздел «Статьи».
ient_reject_code. 3. http://forum.deepnet.ru.

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

АВТОМАТИЗАЦИЯ MS WINDOWS,
ИЛИ AUTOIT КАК МЕЧТА ЭНИКЕЙЩИКА
ЧАСТЬ 4
Итак, когда диск для автоматической
Итак,
установки уже у вас в руках, надо правильно
его использовать. А после установки рабочей
станции еще и получить отчет. Обо всем этом
в последней, заключительной части статьи
об AutoIt.
АЛЕКСЕЙ БАРАБАНОВ
Полная виртуализация работы ! Перезагрузка и далее снова подключение к рабочему
столу как localadmin.
Если у вас дома в телефоне нет гудка, позвоните ! Рабочая станция включается в домен.
в службу компьютерной поддержки.
Мы можем это починить прямо из офиса.
! Перезагрузка с последующим подключением к рабоче-
му столу как localadmin.
Наконец-то диск с автоматически устанавливаемым Win- ! Выбранный доменный пользователь прописывается на
dows готов. Самое главное, что пользоваться им должны рабочей станции как администратор и назначается в
не системные администраторы, а обычные рядовые со- список удаленного доступа.
трудники обслуживаемых компаний. Такой диск позволя- ! Устанавливается принтер.
ет произвести установку новой станции или переустанов- ! Пользователь localadmin выходит из системы.
ку поврежденной станции без локального участия систем-
ного администратора. Сотрудник, оставшийся без рабоче- Все! Станция готова к работе. Можно перед выходом
го места, должен лишь в общих чертах представлять про- распечатать на локальном принтере приглашение для со-
цесс установки. Ему достаточно поместить диск, заранее трудника приступить к работе. После этого обрадованный
созданный по указанной методе и оставленный для тако- решением его проблем сотрудник прекращает курить и на-
го случая на предприятии, в лоток CD-Rom и произвести чинает работать. А «утомленный» сисадмин переходит к
перезагрузку компьютера, не забыв нажать «any key», что- кофе-брейку, что никак не раздражает его работодателя,
бы активировать загрузку с CD. Единственный раз, когда так как происходит за десятки или даже сотни километров
ему придется проявить самостоятельность, это выбор мес- от кабинета строгого руководителя. Шутка, конечно, но так
та, точнее, раздела, установки. Так как используется рус- или иначе все свои действия сисадмин может выполнять в
сифицированная версия Windows, то все диалоги, опреде- весьма комфортных условиях. Скорее всего, с только что
ляющие выбор, переведены на русский язык и снабжены установленной станции надо будет снять информацию для
комментариями. У меня не было случая, чтобы кто-нибудь отчета или дождаться, когда эта информация поступит в ав-
ошибся разделом. Это ведь так просто – нажать <Enter> и томатизированную систему учета, так как именно для это-
затем <L>. После чего самое главное для окружающих не го была предусмотрена установка snmp и настройка файр-
трогать ни клавиатуру, ни мышку. Установка продолжается вола для доступа из локальной сети. Отчет можно офор-
от 40 минут до полутора часов, в зависимости от мощности мить по вкусу, например, так, как приведено на снимке с
компьютера. В результате будет запущен сеанс Админис- экрана http://www.barabanov.ru/arts/autoit/draw7-8.png, пос-
тратора с уже известным паролем. Вот в этот момент при- ле чего остается его распечатать и заполнить приватной
ходит черед для приложения рук реального сисадмина-аут- информацией. Если одновременно устанавливается боль-
сорсера. Обычно этому предшествует звонок с сообщени- шое число станций, то возможность автоматически полу-
ем, что установка завершена. С точки администрирования чить их характеристики сильно облегчает создание отчет-
через сеть (автор это делает по каналам openvpn или pptp) ности, что уже прямо связано с закрытием работ у заказ-
поднимается подключение к удаленному рабочему столу. чика. Но даже на изолированной рабочей станции можно
И затем неторопливо производится завершение настрой- получить ту же самую отчетность прямо в процессе уста-
ки рабочей станции. Например, так: новки. Например, используя утилиту cpu-z для детектиро-
! Бюджетам Администратор и localadmin устанавливают- вания оборудования с http://www.panopsys.com, «обернув»
ся надежные пароли. ее скриптом на AutoIt, или просто воспользоваться данны-
! Оба бюджета назначаются в список удаленного досту- ми из реестра MS Windows, которые можно считать тем же
па. самым AutoIt, и после форматирования записать в файл с
! Рабочей станции меняется имя на реальное. отчетом. Вариант с cpu-z рассмотрим подробнее.

46
администрирование
При написании этого скрипта опять немного усложним
использованный инструментарий. Обратите внимание, в ко-
манду запуска добавим флаг @SW_HIDE, заставляющий
спрятать окошко с запускаемым командным интерпрета-
тором. Далее все по обычной схеме : запуск → анализ пе-
рехватчика → написание команд. Но в случае с этой про-
граммкой все оказывается не так просто. После выхода на
закладку с кнопкой для генерации отчета в форме html ока-
зывается, что нет способа сделать ее активной с помощью
клавиатурных нажатий. Приходится воспользоваться эму-
ляцией мышиных кликов. Для этого, как показано на рис. 1,
надо определить относительные координаты точки, в кото-
рой должно произойти нажатие мыши.
Эта задача должна иметь решение, независимое от раз-
мера экрана и положения рабочего окна на нем. Для этого
способ указания координат мыши переводим в относитель- Рисунок 1. Определяем координаты точки нажатия
ный, отсчитываемый от верхнего левого угла активного ок-
на режим, задавая параметр «MouseCoordMode», равный 0.
Но координаты курсора, отражаемые в перехватчике, име-
ют абсолютное значение. Поэтому сначала определяем ко-
ординаты точки, соответствующей верхнему левому краю
окна, затем координаты нужной точки и только тогда пере-
водим координаты второй точки в относительные. В нашем
случае получается так: X=455-308=147, а Y=528-116=412.
И именно 147 и 412 надо использовать в программе. Пол-
ный текст программы приведен далее:

Листинг 1. Программа получения состава оборудования

AutoItSetOption ( "WinTitleMatchMode", 2 )
AutoItSetOption ( "WinDetectHiddenText", 1 )
AutoItSetOption ( "SendAttachMode", 1 )
; open free desktop
WinMinimizeAll ( )
Sleep ( ‘1000’ )
; run test Рисунок 2. Отчет о завершении установки
Run ( @ComSpec & " /c cpuz.exe", '' ,@SW _ HIDE )
If WinWaitActive ( 'CPU-Z','',10 ) == 0 Then
Exit Для работы этого скрипта нужно скачать с указанного
EndIf сайта утилиту cpu-z и, для того чтобы эта утилита могла за-
Send ( '{RIGHT}' )
Sleep ( '1000' ) пускаться автоматически без указания точного пути до ис-
Send ( '{LEFT 2}' ) полняемого файла, подложить ее в $OEM$/$$/System32.
Sleep ( '1000' )
Send ( '{RIGHT 5}' ) Скрипт, который будет производить запуск, поместить в
Sleep ( '1000' ) $OEM$/$1/InstData в откомпилированном виде. Далее ко-
FileDelete ( @WindowsDir & '\' & @ComputerName & '.html')
AutoItSetOption ( "MouseCoordMode", 0 ) манду запуска запишем в общий командный файл :
MouseClick ( 'left', 147, 412, 1 )
If WinWaitActive ( 'Сохранить как','',10 ) == 0 Then Листинг 2. Вызов программы получения состава оборудования
ProcessClose ( 'cpuz.exe' )
Exit /heap/Windows/uawsp2 # grep cpu-z ↵
EndIf \$OEM\$/\$1/InstData/GuiRunOnce.cmd
Send ( '{DEL}' )
Sleep ( '1000' ) %systemdrive%\InstData\get_cpu-z_info.exe
Send ( @WindowsDir & '\' & @ComputerName & '.html')
Sleep ( '1000' ) По завершении установки будет создаваться отчет по
Send ( '{ENTER}' ) оборудованию в формате html и записываться автоматиче-
If WinWaitActive ( 'CPU-Z','',10 ) == 0 Then
ProcessClose ( 'cpuz.exe' ) ски в файл «Имя рабочей станции.html». Примерно так, как
Exit это показано на рис. 2.
EndIf
Send ( '!{F4}' ) В заключение добавлю, что некоторые тексты, обсуж-
If WinWaitClose ( 'CPU-Z','',10 ) == 0 Then даемые в статье, но не удостоившиеся отдельной ссылки,
ProcessClose ( 'cpuz.exe' )
Exit можно найти в архиве по ссылке 1.
EndIf Hикогда нас не благодарите. Мы любим это, и нам за
If FileExists ( @WindowsDir & '\' & @ComputerName & ↵
'.html') == 1 Then это платят!
; run browser
Run ( @ComSpec & " /c rundll32 url.dll, ↵
FileProtocolHandler " & @WindowsDir & ‘\’ ↵ Ссылки:
& @ComputerName & '.html','',@SW _ HIDE ) 1. Архив исходных текстов: http://www.barabanov.ru/arts/
EndIf
Exit autoit/src.tgz.

№7, июль 2005 47


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

АВТОМАТИЗИРУЕМ ПОДКЛЮЧЕНИЕ
БАЗ 1С НОВОЙ ВЕРСИИ 8.0

ИВАН КОРОБКО

Специалисты компании 1С значительно переработали систему безопасности в базах 1С новой


версии 8.0 по сравнению с прошлой 1С 7.7. В связи с этим архитектура программы изменилась
коренным образом. Как следствие стал иным и механизм подключения баз.

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

М
ы уже знакомили вас с автоматическим управлени-
ем подключения баз 1С v.7.7 с помощью сценария
регистрации пользователей в сети (см. [1]). Поль-
зователям, которые входили в соответствующие группы
безопасности, сценарий автоматически подключал необ-
ходимые сетевые базы и отключал те, к которым пользо-
ватель не имел прав доступа, при этом подключенные ло-
кальные базы сценарием не затрагивались. С появлением
1С v.8.0 ситуация изменилась: сценарий для подключения
баз 1С v.7.7 не подходит для новой версии 1С, поскольку ин-
формация о подключаемых базах для версии 7.7 хранилась
в системном реестре на рабочей станции, а для версии 8.0 –
в файлах. Сегодня мы подробно рассмотрим механизм под- Рисунок 2. Браузер 1С
ключения баз 1С v.8.0, ее итогом будет сценарий, который
в автоматическом режиме управляет подключением сете- тивном случае данные в браузере 1С будут отображаться
вых баз, записи, соответствующие в браузере локальным некорректно либо не будут отображаться вовсе.
базам, будут перенесены в отдельную папку.
Управляем текстовыми файлами
Выбираем язык программирования в кодировке utf-8
Для создания сценариев регистрации пользователей сущес- Объект FSO, традиционно используемый для создания тек-
твует множество языков, однако остановим свой выбор на стовых файлов, не подходит, поскольку он не поддержива-
KIXTart. Этот язык является стандартным языком програм- ет требуемой кодировки (utf-8). Для решения поставленной
мирования сценариев компании Microsoft. Его дистрибутив задачи предлагается использовать объект ADODB.Stream.
можно найти в Microsoft Resource Kit или бесплатно загру- Управление текстовыми файлами подразумевает чтение и
зить последнюю версию из сети Интернет (http://kixtart.org). запись данных в файл. Приведу два соответствующих при-
Подробное описание функционала языка можно найти на мера. Чтение данных из текстового файла:
этом же сайте.
Замечание: сценарии, созданные вами ранее на VB- $Stream = CreateObject("ADODB.Stream")
$Stream.Type =2
Script, Jscript, могут быть легко переписаны под KIXtart. $Stream.CharSet = "Utf-8"
$Stream.Open
$Stream.LoadFromFile("1.txt")
Рассмотрим внутреннее устройство $GetFile = $Stream.Readtext()
клиентской части 1C v.8.0 $Stream.Close
Как было сказано ранее, информация о подключенных ба-
зах для версий 7.7 и 8.0 находится в разных местах. Теперь В примере данные считываются из файла 1.txt в пе-
все данные хранятся в каталоге «Documents and Settings\ ременную $GetFile. Параметр $Stream.Type может прини-
%username% \Application Data\1C\1Cv8». Для успешно- мать значения 1(binary) или 2(text), в зависимости от ти-
го подключения баз необходимо в нем создать минимум па данных, содержащихся в файле. С помощью параме-
два файла (1Cv8strt.pfl и v8ib.lst) и соответствующие ID баз тра $Stream.CharSet управляют кодировкой чтения/записи
папки. В каждой из них также должен быть создан файл данных в файл. Доступные для данной ОС кодировки пе-
usr.def. Файловая структура подключаемых баз приведе- речислены в системном реестре HKEY_CLASSES_ROOT\
на на рис. 1. MIME\Database\Charset.
Запись данных в текстовый файл:

$Stream = CreateObject("ADODB.Stream")
$Stream.CharSet = "utf-8"
$Stream.Mode = 3
$Stream.Open
$Stream.WriteText("Записываемые данные")
$Stream.SaveToFile("1.txt")
$Stream.Close

Рисунок 1. Файловая структура клиентской части 1С 8.0 В приведенном примере данные, на которые ссылает-
Управление отображением списка баз (визуальная ся функция Stream.WriteText(), записываются в файл 1.txt;
структура) в браузере 1С осуществляется с помощью файла С помощью параметра $Stream.Mode осуществляется уп-
v8ib.lst (рис. 2). С помощью второго файла – 1Cv8strt.pfl ре- равление режимом работы с данными файла. Основные
ализовано манипулирование такими параметрами, как раз- принимаемые значения – 1 (чтение – по умолчанию), 2 (за-
мер и положение браузера 1С на экране, сортировка спис- пись) и 3 (чтение/запись).
ка баз и т.д. В файле usr.def содержится имя пользователя,
который последний открывал данную информационную ба- Структура файла v8ib.lst
зу. Все три файла имеют кодировку utf-8, и соответственно В файле v8ib.lst содержащиеся данные описывают один из
создавать их необходимо именно в этой кодировке. В про- двух объектов: папку или ссылку на базу. Существуют ссыл-

№7, июль 2005 49


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

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

Рисунок 3. Параметры настройки браузера 1С

Параметры «ShowIBsAsTree», «AutoSortIBs», «LRInfoBa-


seIDList» могут принимать значения 0 или 1, исключение со-
ставляет параметр «ShowRecentIBs» – принимаемые зна-
Пример подключения локальной базы: чения от 1 до 9.

[Тестовая локальная база] Алгоритм работы скрипта


Connect=File="С:\Base";
ID=28f15724-3c41-4753-b5a4-42bb454b8be3 Работу скрипта условно можно разделить на несколько
OrderInList=32768 частей:
Folder=/Тестовые базы
OrderInTree=65536 1. Генерация файла 1Сv8strt.pfl
2. Обработка данных файла v8ib.lst:
Пример подключения сетевой базы: ! Чтение, анализ и вычленение данных о локальных
базах.
[Тестовая сетевая база] ! Определение и формирование данных для подклю-
Connect=Srvr="sql.server.domain.ru";Ref="Enterprise _ test";
ID=28f15724-3c41-4753-b5a4-42bb454b8be3 чения доступных сетевых баз.
OrderInList=16384 ! Формирование файла v8ib.lst, создание соответству-
Folder=/
OrderInTree=32768 ющих каталогов, файлов def.usr.

Скрипт: файл 1cv8strt.pfl


Синтаксис подкаталога Файл 1cv8strt.pfl статичен и меняется крайне редко, поэтому
Описание каталога аналогично описанию баз, однако существует два варианта его создания на рабочей станции
есть два принципиальных отличия: отсутствие параметра пользователя: первый – копирование с сервера (см. лис-
connect и значение параметра OrderInList=-1: тинг файла в приложении на сайте журнала www.samag.ru
в разделе «Исходный код»), второе – его генерация с по-
[Локальные базы] мощью сценария. Рассмотрим второй случай.
ID=7fa1d5a9-d087-4026-9eea-f18a233d618f
OrderInList=-1 Для упрощения управления базами по умолчанию и
Folder=/ упорядочиванию структуры рекомендуется считывать со-
OrderInTree=16384
ответствующую информацию из конфигурационного фай-
ла. Пример файла приведен ниже:
Структура файла 1Сv8strt.pfl
Анализируя создаваемый 1С файл и изменяя различные [1c8]
ShowAsTree=1
параметры, были приобретены знания по управлению на- AutoSort=1
стройками визуального представления браузера 1С, уме- DefaultBaseName=Сетевая база данных 1
ние назначать базу по умолчанию (при открытии браузера).
Проанализируем фрагменты файла (листинг файла см. на Считывание данных из конфигурационного файла осу-
сайте www.samag.ru, в разделе «Исходный код»): ществляется следующим образом:

{"N",1},"ShowIBsAsTree", …
{"B",1},"AutoSortIBs", $DefaultBaseName=readproÞlestring("$conÞg _ ini","1c8", ↵
{"B",0},"ShowRecentIBs", "DefaultBaseName")
{"B",0},"LRInfoBaseIDList", $meta _ 1c8=readproÞlestring("$conÞg _ ini","1c8", ↵

50
администрирование
"base1c8preÞx") $fso = CreateObject("Scripting.FileSystemObject")
$ShowAsTree=readproÞlestring("$conÞg _ ini","1c8", ↵ $fso.DeleteFile($f _ name)
"ShowAsTree") $fso.close
$AutoSort=readproÞlestring("$conÞg _ ini","1c8","AutoSort")
… Имеющиеся данные необходимо разбить на подстро-
где переменная $config_ini содержит имя и полный путь, в ки и записать в массив, затем, проанализировав их, вы-
случае необходимости, к конфигурационному файлу. Вто- членить локальные базы. В качестве признака, по кото-
рой параметр – название раздела, третий – соответственно рому будут формироваться подстроки, рекомендуется ис-
параметра, значение которого возвращает функция. пользовать символ «[». При таком преобразовании эле-
Ранее описывалась структура этого файла. ID-номер ба- ментами массива будут содержать описания баз цели-
зы по умолчанию определяется в двойном цикле Do…Loop ком, например:
и зафиксируется в переменной $default_guid.
a[0]= "[Тестовая сетевая база]" + chr(13) + chr(10) + ↵
"Connect= File = " + chr(34) + "С:\Base" + chr(34) + ↵
… ";" + chr(13) + chr(10) + ↵
if instr(ucase($des), ucase($DefaultBaseName))<>0 "ID=28f15724-3c41-4753-b5a4-42bb454b8be3" + chr(13) + ↵
$default _ guid=right( $infos[1],len( $infos[1])-3) chr(10) + "OrderInList=16384" + chr(13) + chr(10) + ↵
Endif "" + chr(13) + chr(10) + "Folder=/" + chr(13) + ↵
… chr(10) + "OrderInTree=32768"
Перед записью в файл данные накапливаются в пере-
менную, в данном случае $cfg. Полностью листинг генера- Затем просмотрите и отберите элементы массива, ха-
ции файла 1cv8strt.pfl приведен в приложении. В данном рактеризующие локальные базы. Признаком локальности
примере покажем лишь принцип, лежащий в основе фор- базы является значение элемента connect, начинающегося
мирования. Использование кавычек вносит коррективы в с file=. Накопление данных осуществляется в переменную,
механизм генерации файла: в листинге скрипта кавычка которая потом также будет разложена в массив, но уже по
выглядит следующим образом: « + chr(34) + ». другому признаку: переводу и возврату каретки на новую
строку, а именно chr(13)+chr(10):
$en=chr(13)+chr(10)
… $en=chr(13)+chr(10)
$cfg = $cfg + "{"+$en
$cfg = $cfg + "{" + chr(34) + "LRInfoBaseIDListSize" + ↵ …
chr(34) + ","+$en $temp=""
$cfg = $cfg + "{" + chr(34) + "N" + chr(34) + ","+ ↵ ' расчленение строки на элементы массива.
$ShowAsTree+"}," + chr(34) + "ShowIBsAsTree" + ↵ ' Признак – наличие "["
chr(34) + ","+$en $array _ 0=split($GetFile,"[")
$cfg = $cfg + "{" + chr(34) + "B" + chr(34) + ","+ ↵ for each $element in $array _ 0
$AutoSort+"}," + chr(34) + "AutoSortIBs"+ ↵ ' "connect=Þle=" – признак локальности БД
chr(34) + ","+$en if instr(ucase($element),ucase("connect=Þle="))<>0
… $element="["+$element
$cfg = $cfg + "}"+$en $temp=$temp+$element
endif
next
После наполнения переменной данными осуществля-
ется запись ее содержимого в файл. Напомним, что файл $array _ base=split($temp, $en) ' массив локальных баз
1cv8strt.pfl находится в каталоге «Documents and Settings\
%username%\Application Data\1C\1Cv8». Поскольку нумерация баз меняется, существующие
локальные базы данных необходимо переместить в отде-
$FSO = CreateObject("Scripting.FileSystemObject"). ↵ льную виртуальную папку, например, «Локальные базы»,
GetFile($path _ to _ base+"1cv8strt.pß")
if @error=0 поэтому значения параметров OrderInList и OrderInTree не-
$FSO.Delete обходимо обнулить, значения параметра Folder исправить
endif
$FSO.close на Folder=/ Локальные базы. Для этого необходимо обно-
вить значения элементов массива:
$Stream = CreateObject("ADODB.Stream")
$Stream.CharSet = "utf-8"
$Stream.Mode = 3 $virtual _ local _ folder="Локальные базы"
$Stream.Open
$Stream.WriteText($cfg) for $i=0 to ubound($array _ base)
$Stream.SaveToFile($path _ to _ base+"1cv8strt.pß") $element=$array _ base[$i]
$Stream.Closeendif
if instr(ucase($array _ base[$i]),ucase("orderin"))<>0
$array _ base[$i]=left($element, ↵
instr($element,"="))
Скрипт: файл v8ib.lst endif

if instr(ucase($element),ucase("folder="))<>0
Локальные базы $array _ base[$i]=left($element, ↵
На первом этапе осуществляется чтение существующего instr($element,"=")+1)+ ↵
$virtual _ local _ folder
файла и вычленение списка локальных баз. Пример чте- endif
ния файла был приведен ранее, поэтому сразу перейдем
next
к обработке считанных данных в переменную, например,
$GetFile: после того как данные считаны, файл необходи- После переприсвоения элементы массива $array_base
мо удалить: могут иметь следующий вид:

№7, июль 2005 51


администрирование
$array _ base[0]= "[Тестовая сетевая база]" Поскольку название группы все время меняется, то
$array _ base[1]= "Connect=File="С:\Base";"
$array _ base[2]= "ID=28f15724-3c41-4753-b5a4-42bb454b8be3" в соединение с AD необходимо интегрировать функцию
$array _ base[3]= "OrderInList=" EnumGroup():
$array _ base[4]= "Folder=/ Локальные базы"
$array _ base[5]= "OrderInTree="
…………………………………. ' определение имени текущено домена
$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")
ных из AD по следующему алгоритму: с помощью встроен- $objCommand.ActiveConnection = $objConnection
ной в KIX функции EnumGroup() просматривается список
$i=ubound($array _ base)
групп, в которые входит настоящий пользователь, и отфиль- DO
тровываются только те из них, которые имеют заранее ого- $Group = ENUMGROUP($p)
if instr("$Group","$meta _ 1c8")<>0
воренный префикс в названии, например, «1с8$_»: $1c8 _ group=right($group, ↵
len($group)-instrrev($group,"\"))
$i=0 $strADSQuery = "SELECT name,info,description FROM ↵
$Temp="" '" +$domain+"' WHERE objectClass='group’ ↵
Do and samaccountname='"+$1c8 _ group+"'"
$Group = EnumGroup($i)
$i = $i + 1 $objCommand.CommandText = $strADSQuery
If instr(ucase($group), ucase("1c8$ _ "))<>0
………….. $st = $objCommand.Execute
EndIf $st.MoveÞrst
Until Len($Group) =0 Do
MessageBox("$Temp","",0,0) $name = $St.Fields("name").Value
$description = $St.Fields("description").Value
$des=""
Итак, если пользователь входит в группу с указанным For each $element in $description
префиксом, то ему должна быть подключена соответствую- $des=$des+$element
Next
щая сетевая база данных. Параметры ее подключения на-
ходятся в свойствах группы (см. рис. 4). Поле Description $infos = split($St.Fields("info").Value,chr(13)+chr(10))
содержит название базы, которое совпадает с названием ……………………………….
раздела в файле v8ib.lst. Месторасположение и ID-базы – $st.MoveNext
Until $st.EOF
значение параметра notes. Обратите внимание, что пара- endif
метр Description представляет собой массив элементов, $p=$p+1
UNTIL Len($Group) = 0
а notes – строку, которую будет необходимо превратить в
массив. Однако прежде всего необходимо получить доступ Замечание: в приведенном примере название группы,
к Active Directory с помощью ADODB.Connection и ADODB. возвращаемое функцией enumgroup() имеет вид domain\
Command и составить запрос. groupname, где domain – короткое имя домена. В SQL-за-
просе к Active Directory должно фигурировать только имя
группы, т.е. необходимо отбросить префикс «domain\», по-
этому короткое имя группы будет выглядеть:

$1c8 _ group=right($group,len($group)-instrrev($group,"\"))

Данные, содержащиеся в массиве $infos необходимо


преобразовать и добавить их в конец массива $array_base.
При этом добавляемые в него элементы должны соответс-
твовать ранее описанному шаблону для сетевых баз:

$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

Формирование файловой структуры


Файловая структура формируется внутри каталога «Doc-
Рисунок 4. Группа безопасности uments and Settings\%username%\Application Data\1C\

52
администрирование
1Cv8». Расположение данного каталога на рабочей стан- Из примера видно, что максимальное значение парамет-
ции не фиксировано, поэтому для каждого пользовате- ра OrderInTree=32768. Ранее отмечалось, что начало нуме-
ля путь необходимо определять индивидуально с помо- раций и шаг значений параметров OrderInList и OrderInTree
щью функции: не имеют значения. Этот факт подтвержден многочислен-
ными экспериментами. В качестве начала отсчета были вы-
$path _ to _ base=CreateObject("WScript.Shell").↵ браны число 16384 и такой же шаг (заимствовано из 1С).
SpecialFolders(5)+"\1C\1Cv8\"
Для удобства корректировки значений введены два коэф-
Определив ID сетевой базы, в том же цикле Do..Loop фициента $w_1 и $w_2. Один из них управляет значениями
(см. листинг скрипта на сайте www.samag.ru в разделе «Ис- OrderInList, а второй – OrderInTree соответственно. При та-
ходный код»), необходимо создать соответствующую базе ком способе установки нумерации получится, что в одном из
файловую структуру. каталогов нумерация параметра OrderInList начнется с од-
В каталоге «Documents and Settings\%username%\Ap- ного числа, например, 32768, а в другом – 65536. В каждом
plication Data\1C\1Cv8» для каждой базы необходимо со- из разделов нумерация произвольна и содержимое файла
здать папку, название которой совпадает с ID этой базы, будет корректно считано браузером 1С. Листинг корректи-
а в нем файл usr.def в кодировке UTF-8 со следующим со- ровки данных следующий:
держанием: {«У Вас нет доступа. Обратитесь к системно-
му администратору»}. Это сообщение будет появляться в $const _ w=16384
$w _ 1=1
том случае, если у пользователя нет прав доступа к дан- $w _ 2=3
ной базе данных 1С.
for each $element in $array _ base
if instr(ucase($element),ucase("orderintree"))<>0
… $s=$s+$element+cstr($const _ w*$w _ 2)+$en
$id _ dir _ name=$path _ to _ base+right( $infos[1], ↵ $w _ 2=$w _ 2+1
len( $infos[1])-3) else
… if instr(ucase($element), ↵
ucase("orderinlist"))<>0
md $id _ dir _ name ; создание каталога $s=$s+$element+cstr ↵
($const _ w*$w _ 1)+$en
; создание файла def.usr $w _ 1=$w _ 1+1
$FSO = CreateObject("Scripting.FileSystemObject"). ↵ else
GetFile($id _ dir _ name+"\def.usr") $s=$s+$element+$en
if @error=0 endif
$FSO.Delete endif
endif next
$FSO.close

$Stream = CreateObject("ADODB.Stream") После того как все данные к записи приготовлены, мож-
$Stream.CharSet = "utf-8"
$Stream.Mode = 3 но приступить к записи в файл. В него следует записать со-
$Stream.Open держание трех переменных: две переменные содержат ин-
$Stream.WriteText("{"+chr(34)+"У Вас нет доступа. ↵
Обратитесь к системному администратору."+chr(34)+"}") формацию о создаваемых каталогах в браузере 1С, тре-
$Stream.SaveToFile($id _ dir _ name+"\def.usr") тья – накопленные элементы массива $array_base (пере-
$Stream.Close
… менная s). Напомню, что файл v8ib.lst находится в катало-
ге «Documents and Settings\%username%\Application Data\
1C\1Cv8».
Запись данных в файл
На последнем этапе осуществляется запись сформиро- $en=chr(13)+chr(10)

ванных данных в файл. В решении данной задачи есть не- $Stream = CreateObject("ADODB.Stream")
сколько нюансов: помимо сформированных данных в фай- $Stream.CharSet = "utf-8"
$Stream.Mode = 3
ле необходимо в него записать информацию, касающую- $Stream.Open
ся каталогов, и обновить нумерацию параметров OrderIn- $Stream.WriteText($local _ folder+$en+$test _ folder+$en+$s)
$Stream.SaveToFile($path _ to _ base+"v8ib.lst")
List и OrderInTree. $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"

ID должен быть уникальным. Каким конкретно? – не из- Литература:


вестно. Был проведен эксперимент, в результате которого 1. Коробко И. Автоматизация процесса подключения баз
выяснилось, что ID может быть любым. На практике реко- 1С с помощью сценария регистрации пользователей
мендуется выбрать один из ID, созданных 1C, и изменить в сети. – Журнал «Системный администратор» №3,
одну из его частей произвольным образом. 2005 г. – 48-51 с.

№7, июль 2005 53


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

УСТАНАВЛИВАЕМ И НАСТРАИВАЕМ
WINDOWS SERVER UPDATE SERVICES

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

В
июне этого года вышла офици- вающего до 500 клиентов, Microsoft ре- ! Семейство Microsoft Windows 2000
альная версия службы Windows комендует использовать компьютер с с пакетом обновления 3 или вы-
Server Update Services (WSUS), процессором частотой не ниже 1 ГГц, ше;
предназначенной для централизо- оперативной памятью не менее 1 Гб. ! Microsoft Windows XP Professional
ванного управления обновлениями и Для установки WSUS файловая с пакетами обновления SP1 и SP2
исправлениями корпоративных про- система сервера должна соответство- или без них;
дуктов Microsoft: Windows XP Profes- вать следующим требованиям: ! Семейство серверов Microsoft
sional, Windows 2000, Windows Server ! системный раздел и раздел, пред- Windows Server 2003.
2003, Office XP, Office 2003, SQL Server назначенный для установки WSUS,
2000, Exchange Server 2000 и Exchange должны быть отформатированы в Приступаем к установке
Server 2003. файловой системе NTFS; Установку WSUS могут выполнить
С большинством возможностей ! для системного раздела требует- только члены локальной группы «Ад-
WSUS мы уже познакомили читате- ся не менее 1 Гб свободного про- министраторы». Размер дистрибути-
ля в обзоре «Windows Server Update странства; ва WSUS – около 125 МБ. Для запуска
Services» (см. №4, 2005 г). А сегод- ! необходимо не менее 6 Гб свобод- мастера установки необходимо выпол-
ня займемся установкой и первона- ного пространства на диске, где нить файл WSUSSetup.exe.
чальной настройкой сервера WSUS на хранятся данные WSUS; рекомен- После принятия лицензионного со-
компьютер с операционной системой дуется 30 Гб; глашения вам будет предложено вы-
Windows Server 2003 в среде Active Di- ! необходимо не менее 2 Гб свободно- брать источник обновлений клиентских
rectory. Установка на компьютер с Win- го пространства на диске, куда про- компьютеров: либо они будут храниться
dows 2000 Server несколько отличает- граммой установки WSUS устанав- локально на сервере, либо каждый раз
ся. Так, Microsoft SQL Server 2000 Desk- ливается Windows SQL Server 2000 по запросу клиента будут загружаться
top Engine (MSDE) для Windows 2000 Desktop Engine (WMSDE). с узла Microsoft Update. Гораздо рацио-
Server не входит в состав дистрибути- нальнее представляется хранить обнов-
ва WSUS, в отличие от Microsoft Win- На компьютере, предназначенном ления локально. Во-первых, в этом слу-
dows SQL Server 2000 Desktop Engine для сервера WSUS, предварительно чае уменьшаются затраты на интернет-
(WMSDE) для Windows Server 2003. необходимо установить следующие трафик. Во-вторых, клиентские ком-
Подробнее об этом можно прочитать компоненты Windows Server 2003: пьютеры будут обновляться быстрее. В
в документации к WSUS. ! Microsoft Internet Information Services любом случае при желании эту настрой-
Ссылки на все необходимые для (IIS) 6.0; ку вы сможете позже изменить.
установки WSUS программы и доку- ! Microsoft .NET Framework 1.1 с В следующем окне необходимо вы-
ментацию (в основном на английском пакетом обновления 1 для брать параметры базы данных: можно
языке) можно найти на домашней стра- Windows Server 2003; установить WMSDE вместе с WSUS
нице WSUS (http://www.microsoft.com/ ! Background Intelligent Transfer или использовать существующий
windowsserversystem/updateservices/ Service (BITS) 2.0. Microsoft SQL Server 2000. Поскольку
default.mspx). WMSDE входит в состав дистрибути-
На клиентских компьютерах долж- ва WSUS и является бесплатным про-
Готовим все необходимое на функционировать служба автома- дуктом, вряд ли найдутся причины от-
к установке тического обновления. Она существу- казаться от его установки.
Для работы сервера WSUS, обслужи- ет для операционных систем: Следующее окно позволяет вы-

54
администрирование
брать веб-узел для использования Для начала нужно настроить спо- параметров службы автоматического
сервером WSUS. Microsoft рекоменду- соб назначения компьютеров в группы: обновления клиентских компьютеров.
ет использовать существующий веб- либо они будут добавляться в группы
узел IIS по умолчанию и 80-й порт. Ес- со стороны сервера (т.е. вручную через Параметры синхронизации
ли этот порт уже занят, потребуется со- консоль WSUS), либо со стороны кли- Теперь необходимо настроить типы за-
здать отдельный узел IIS (специально ента (т.е. с помощью групповых поли- гружаемых обновлений. Для этого на
для WSUS), работающий по настраи- тик или настроек реестра Windows). странице консоли администрирования
ваемому порту. Для этого откроем страницу «Па- WSUS щёлкаем по ссылке «Парамет-
В окне «Параметры зеркального раметры компьютеров», щелкнув по ры → Параметры синхронизации». От-
обновления» можно указать управля- ссылке «Параметры» в верхней части кроется страница с настройками синх-
ющую роль этого сервера. Если это консоли администрирования WSUS, ронизации WSUS (рис. 1).
первый сервер WSUS в сети, пропус- затем «Параметры компьютеров». В разделе «Расписание» можно вы-
каем это окно. Иначе, ставим флажок На открывшейся странице можно вы- брать ручную либо автоматическую
и вводим имя сервера верхнего уров- брать способ назначения компьютеров ежедневную синхронизацию в опре-
ня в поле «Имя сервера». После уста- в группы. Если сеть небольшая и ко- деленное время. Пока оставляем руч-
новки WSUS будет предложено запус- личество групп WSUS невелико, мож- ной режим запуска процесса синхро-
тить консоль администрирования, ко- но оставить значение по умолчанию. низации.
торая также доступна с других ком- (Использовать задание «Переместить В разделе «Продукты и классы»
пьютеров сети по адресу: http://<имя компьютеры» в Windows Server Update можно указать программные продук-
сервера WSUS>/wsusadmin. Для запус- Services.) ты и типы обновлений для них. Щёлк-
ка консоли администрирования необ- Для создания группы необходимо нув по кнопке «Изменить» в левой час-
ходимо быть членом группы «Админис- щелкнуть по ссылке «Компьютеры» в ти раздела, открываем окно со спис-
траторы WSUS» или членом локальной консоли администрирования WSUS. ком программ, для которых можно за-
группы безопасности «Администрато- Затем на открывшейся странице на- гружать обновления (рис. 2). Отмеча-
ры» на сервере WSUS. жать на ссылку «Создать группу ком- ем продукты, которые есть в нашей се-
пьютеров» и ввести ее имя. В нашем ти и которые хотим обновлять.
Настраиваем WSUS случае назовем группу Тест. В нее не- Таким же образом, щелкнув по
Теперь мы выполним первоначальную обходимо включить несколько типич- кнопке «Изменить» под перечнем клас-
настройку сервера WSUS: создадим ных по конфигурации компьютеров, на- сов обновлений, в открывшемся окне
группу компьютеров, на которых бу- ходящихся в сети. Однако сделать это (рис. 3) отмечаем нужные типы (клас-
дем тестировать обновления, устано- можно будет только после настройки сы). Для загрузки доступны следую-
вим параметры синхро-
низации и автоматичес-
кого одобрения. А за-
тем с помощью группо-
вых политик настроим
службу автоматическо-
го обновления клиент-
ских компьютеров.

Создаём группы
компьютеров
Важным моментом в на-
стройке WSUS является
создание групп компью-
теров. Хорошей практи-
кой является тестирова-
ние вновь полученных с
узла Microsoft Update об-
новлений на небольшой
группе типичных для се-
ти компьютеров. Затем в
случае успешного функ-
ционирования тестовых
компьютеров в течение
некоторого времени,
распространение об-
новлений на остальные
компьютеры сети. Рисунок 1. Параметры синхронизации

№7, июль 2005 55


администрирование
метры автоматического одобрения для
обнаружения и установки обновлений.
Пожалуй, будет вполне логичным авто-
матически обнаруживать все синхрони-
зируемые с узлом Microsoft Update клас-
сы обновлений для всех компьютеров
сети, но автоматически устанавливать
их пока не будем.
В разделе «Новые редакции об-
новлений» устанавливается реакция
Рисунок 2. Добавление и удаление Рисунок 3. Добавление и удаление сервера WSUS на выход новых вер-
продуктов классов
сий уже одобренных обновлений. По-
щие классы: драйверы, критические та на локальном сервере указывается лагаю, что вполне естественным бу-
обновления, накопительные пакеты способ загрузки и тип файлов обновле- дет установить параметр «Автомати-
обновления, обновления системы бе- ний. В большинстве случаев оптималь- чески одобрять новейшую редакцию
зопасности и пакеты новых функций. ным вариантом будет локальное хране- этого обновления».
Для каждого типа приводится описа- ние файлов обновлений при включен- В разделе «Обновления Windows
ние. По умолчанию загружаются толь- ном флажке «Загружать файлы обнов- Server Update Services» настраивает-
ко критические обновления и обновле- лений на этот сервер, только если они ся автоматическая загрузка обновле-
ния системы безопасности. На первое одобрены». В этом случае обновле- ний самого сервера WSUS. Естествен-
время можно оставить загрузку обнов- ния будут загружаться с узла Microsoft но, нужно включить этот параметр для
лений только этих классов. Update только в случае одобрения ус- своевременной установки обновлений
Следующий раздел – «Прокси-сер- тановки (администратором или автома- и исправлений WSUS.
вер». Если в сети для доступа в ин- тически). Файлы так называемой экс-
тернет используется прокси-сервер, пресс-установки имеют больший раз- Брандмауэр
заполняем необходимые поля этого мер, т.е. будут увеличивать трафик ин- Если между сетью организации и ин-
раздела. тернет-соединения, и соответственно тернетом находится брандмауэр,
Следующий раздел – «Источник увеличится время их загрузки на сер- возможно, понадобится его настро-
обновления». Если это первый сервер вер, но обновления клиентских ком- ить. Для получения обновлений с уз-
WSUS в сети, оставляем загрузку с уз- пьютеров будут происходить быстрее. ла Microsoft Update сервер WSUS ис-
ла Microsoft Update. В противном слу- Здесь нужно сделать выбор в зависи- пользует 80-й порт при подключении
чае указываем адрес и порт вышесто- мости от конкретной конфигурации по протоколу HTTP и 443-й при под-
ящего сервера WSUS, с которого будут сети, скорости, загруженности и стои- ключении по HTTPS. Поэтому эти пор-
загружаться обновления. мости интернет-соединения. Пока мож- ты должны быть открыты на брандмау-
Последний раздел – «Файлы об- но не включать параметр «Загружать эре для исходящих соединений.
новлений и языки». Нажав на кнопку файлы экспресс-установки». Если политикой информационной
«Дополнительно», попадаем в окно на- безопасности организации запрещен
стройки дополнительных параметров Параметры автоматического доступ к этим портам, можно разре-
синхронизации (рис. 4). В группе пара- одобрения шить доступ только для определен-
метров «Файлы обновлений» задаётся Далее необходимо настроить автома- ных доменов, список которых приве-
место хранения и в случае выбора мес- тическое одобрение обнаружения и ден в документации к WSUS.
установки обнов-
лений. Под обнару- Параметры службы
жением понимается автоматического обновления
проверка необходи- клиентских компьютеров
мости и возможнос- Теперь можно приступить к настройке
ти установки обнов- службы автоматического обновления
ления для клиент- клиентских компьютеров. Если в сети
ского компьютера. используется служба каталогов Active
В консоли WSUS Directory, можно и нужно использовать
щелкаем ссылк у объекты групповой политики (GPO)
«Параметры → Па- для настройки клиентов. При отсутс-
раметры автома- твии в сети развернутой службы ката-
тического одобре- логов можно использовать локальную
ния». На открыв- групповую политику.
шейся странице Для этого в редакторе объектов
(рис. 5) в разделе групповой политики нужно открыть
«Обновления» на- узел «Конфигурация компьютера →
Рисунок 4. Дополнительные параметры синхронизации страиваем пара- Административные шаблоны → Ком-

56
администрирование
поненты Windows → Windows Update» мещение службы
(рис. 6). Если этого узла нет, то не- обновлений Micro-
обходимо самостоятельно добавить soft в интрасети»
административный шаблон wuau. (рис. 8). Включа-
adm. Каждый из параметров доста- ем и вводим путь
точно подробно описан, поэтому ос- к серверу WSUS в
тановимся только на тех, которые не- виде: http://<Имя
обходимы для первоначальной на- сервера WSUS>.
стройки. Параметр Раз-
Откройте свойства параметра «На- решать пользова-
стройка автоматического обновления» телям, не являю-
(рис. 7). Во включенном состоянии щимися админис-
этот параметр может принимать одно траторами, полу-
из четырех значений: чать уведомле-
! Уведомлять перед загрузкой об- ния об обновлени-
новлений и уведомлять повторно ях. Не стоит обре-
перед их установкой. При выборе менять пользова-
этого варианта зарегистрирован- телей лишней ин-
ный в системе пользователь с пра- формацией, они и
вами администратора уведомляет- без того постоян-
ся перед началом загрузки и уста- но загружены ра- Рисунок 5. Параметры автоматического одобрения
новки обновлений на компьютер. ботой. Отключим этот параметр. За- на домашней странице консоли WSUS
! Загружать автоматически и уве- одно уменьшим количество входящих или на странице настройки параметров
домлять перед установкой. Если ус- телефонных звонков на наше рабо- синхронизации. Сервер WSUS подклю-
тановить это значение параметра, чее место. чится к узлу Microsoft Update для про-
обновления начинают загружаться Теперь откроем страницу Компью- верки новых доступных обновлений.
автоматически, а зарегистрирован- теры консоли WSUS. Через некоторое После окончания синхронизации сер-
ный в системе пользователь с пра- время, после применения рабочими вер начнет процесс обнаружения. От-
вами администратора оповещает- станциями групповых политик, на этой кроем страницу со списком обновле-
ся перед началом установки. странице начнут появляться имена ком- ний, щелкнув по ссылке «Обновле-
! Загружать автоматически и уста- пьютеров. После этого можно перемес- ния» (рис. 9).
навливать по заданному расписа- тить несколько в созданную ранее груп- В соответствии с нашими настрой-
нию. В этом случае нужно указать пу Тест для установки и проверки об- ками автоматически были одобрены
дни и время принудительной уста- новлений. Для этого выделим нужные для обнаружения все синхронизируе-
новки обновлений на клиентские компьютеры в списке, нажмём ссылку мые обновления для всех компьюте-
компьютеры. Выберем это значе- «Перемещение выбранных компьюте- ров. А для группы Тест автоматически
ние параметра и назначим время, к ров» и в открывшемся окне выберем разрешена установка критических па-
примеру, на начало обеденного пе- группу Тест. кетов и обновлений системы безопас-
рерыва (12:00). Это позволит нам ности (у них в столбце «Одобрение»
выполнять установку обновлений Синхронизация указан тип «Смешанное»). После тес-
в часы наименьшей загрузки сети После настройки параметров щелкаем тирования эти обновления можно уста-
и компьютеров, и без вмешательс- по ссылке «Синхронизировать сейчас» новить на остальные компьютеры сети.
тва и лишних вопро-
сов со стороны поль-
зователей.
! Разрешить локаль-
ному администра-
тору указывать на-
стройки. Если вы ре-
шите доверить ло-
кальным админист-
раторам самим на-
страивать парамет-
ры автоматического
обновления, выбе-
рите это значение.

Следующий пара-
метр – «Указать раз- Рисунок 6. Настройка автоматического обновления

№7, июль 2005 57


администрирование
щем состоянии установки данного ис-
правления на клиентские компьюте-
ры. На вкладке «Редакции» выводит-
ся список всех версий данного обнов-
ления. Для изменения статуса одоб-
рения необходимо щелкнуть по ссыл-
ке «Изменить одобрение» в левой вер-
хней части страницы в разделе «Зада-
чи обновлений».
В разделе «Представление стра-
ницы обновления» можно задать ус-
ловия для фильтра отображения спис-
ка обновлений.
Щелкнув по ссылке «Отчеты», по-
падем на страницу со списком доступ-
Рисунок 7. Настройка автоматического Рисунок 8. Размещение службы ных для генерации отчетов. С их помо-
обновления обновлений Microsoft в интрасети щью можно получить информацию о
Естественно, изменив настройки, мож- чальная загрузка всех требуемых фай- состоянии обновлений, компьютеров,
но возложить обязанности по одобре- лов обновлений может занять доста- результатах синхронизации, а также
нию на сервер WSUS, тем самым сде- точно долгое время. Это зависит от параметрах настройки сервера WSUS.
лав процесс установки обновлений многих факторов: разнообразия опе- Работа с системой генерации отчетов
полностью автоматическим. рационных систем, программных про- достаточно понятна, поэтому не будем
После синхронизации, сбора дан- дуктов, настроек параметров синхро- рассматривать ее подробно.
ных о требуемых для клиентских ком- низации, пропускной способности ин- В самом простом случае настройка
пьютеров обновлениях и их одобре- тернет-канала. сервера WSUS практически законче-
ния для установки (автоматического При выборе обновления в списке в на. Осталось поменять ручной режим
или ручного) начнётся процесс загруз- нижней части страницы (вкладка «Под- запуска синхронизации на выполнение
ки необходимых файлов с узла Micro- робности») появится соответствующая в определенное время, например, но-
soft Update на сервер WSUS. В списке дополнительная информация: назва- чью, в часы наименьшей загрузки се-
обновления помечаются характерны- ние, описание, дата, класс, оценка кри- ти. В списке загружаемых классов об-
ми значками в зависимости от состо- тичности, и т. д. На вкладке «Состоя- новлений в параметрах синхрониза-
яния загрузки. Естественно, первона- ние» приводится информация о теку- ции можно отметить Пакеты обновле-
ния. Также можно вклю-
чить автоматическое
одобрение установки
обновлений на компью-
теры из группы Тест. Но
здесь необходимо быть
осторожным, так как в
результате интернет-
трафик может оказать-
ся значительным (со-
тни мегабайт и даже ги-
габайты), поскольку ло-
кальная база ещё не со-
держит файлов обнов-
лений. При последую-
щих загрузках, разуме-
ется, объем входящего
трафика будет значи-
тельно меньше.
В большинстве слу-
чаев установка и на-
стройка службы WSUS
достаточно проста и по-
нятна и не должна вы-
звать особых трудно-
стей у системных адми-
Рисунок 9. Список обновлений нистраторов.

58
bugtraq

Выполнение произвольных команд Отказ в обслуживании в IA eMailServer


в CSV_DB при обработке команды IMAP LIST
Программа: CSV_DB 1.00. Программа: IA eMailServer версии до 5.3.4.2019.
Опасность: Высокая. Опасность: Средняя.
Описание: Уязвимость существует из-за недостаточной Описание: Уязвимость существует из-за недостаточной
обработки входных данных в параметре file сценария csv_ обработки входных данных в команде LIST IMAP-серве-
db.cgi. Удаленный пользователь может добавить произволь- ра. Удаленный авторизованный пользователь может с по-
ную команду к параметру и выполнить ее с привилегиями мощью специально сформированной строки, содержащей
веб-сервера на целевой системе. Пример: символы (%x), вызвать аварийное завершение работы про-
цесса MailServer.exe.
http://[target]/csv _ db/csv _ db.cgi?Þl e=Þle.extention|command|
URL производителя: www.tnsoft.com.
URL производителя: www.k-collect.net/cgi_lab/csv_db.htm. Решение: Установите последнюю версию (5.3.4.2019) с
Решение: Способов устранения уязвимости не существу- сайта производителя.
ет в настоящее время.
HTTP Request Smuggling-атака
Удаленное выполнение PHP-кода в различных proxy и веб-серверах
в XML-RPC for PHP Программа: Squid 2.5.STABLE7 и более ранние версии; Sun
Программа: XML-RPC for PHP 1.1 и более ранние версии. Java System Web Proxy Server 3.6 SP4; SunONE Web Server
Опасность: Высокая. 6.1 SP4; DeleGate 8.9.2; Microsoft Internet Information Server 5.0,
Описание: Уязвимость в XML-RPC for PHP может позволить 6.0; Apache Tomcat 4.1.24, 5.0.19; BEA WebLogic Server 8.1 SP1;
злоумышленнику выполнить произвольный PHP-код на це- IBM WebSphere 5.0, 5.1; Oracle Application Server Web Cache
левом сервере. Подробности не сообщаются. 9.0.2; Oracle Application Server 9.0.2; Apache web server вер-
URL производителя: http://phpxmlrpc.sourceforge.net. сии 2.x до 2.1.6.
Решение: Способов устранения уязвимости не существу- Опасность: Низкая.
ет в настоящее время. Описание: Уязвимость позволяет удаленному пользова-
телю произвести HTTP Request Smuggling-атаку (атаку со
Отказ в обслуживании в реализации скрытым HTTP-запросом) и отравить кеш прокси-сервера.
TCP-стека во FreeBSD Удаленный пользователь может послать специально сфор-
Программа: FreeBSD 4.10, 4.11, 5.3, 5.4. мированный HTTP-запрос, содержащий два поля заголов-
Опасность: Средняя. ка Content-Length, что заставит уязвимый сервер и следу-
Описание: Уязвимость в опции PAWS Timestamp позволя- ющий за ним HTTP-агент (веб-сервер или еще один прок-
ет удаленному пользователю послать большое количест- си-сервер) обработать этот запрос по-разному. Злоумыш-
во специально сформированных пакетов с большим зна- ленник может внедрить злонамеренный запрос в обычный
чением таймера, что заставит систему воспринимать все и потенциально отравить кеш прокси-сервера.
последующие пакеты как старые и отвергать их. Удален- Злоумышленник может также создать специальный
ный пользователь может разорвать все текущие TCP-со- HTTP-запрос, содержащий большое количество пробелов
единения. и дополнительный взвод каретки в именах HTTP-заголов-
Удаленный пользователь может послать специально ков для удачной эксплуатации этой уязвимости.
сформированный TCP-пакет с флагом SYN и перезаписать Решение: Способов устранения уязвимости не существу-
определенные TCP-опции. ет в настоящее время.
URL производителя: www.freebsd.org. Примечание: Только некоторые производители выпусти-
Решение: Установите обновление с сайта производителя. ли исправления.

Отказ в обслуживании в браузере Выполнение произвольного PHP-сценария


Netscape при обработке в phpBB в коде highlighting
Javascript-функций Программа: phpBB 2.0.15.
Программа: Netscape 8.0.2. Опасность: Высокая.
Опасность: Средняя. Описание: Уязвимость существует из-за некорректного
Описание: Уязвимость существует при обработке специаль- использования функции preg_replace() в сценарии viewtop-
но сформированных Javascript-функций. Удаленный пользо- ic.php при обработке входных данных. Удаленный пользо-
ватель может создать специально сформированную HTML- ватель может с помощью специально сформированного
страницу и вызвать отказ в обслуживании браузера. запроса заставить приложение интерпретировать входные
Эксплоит: www.kurczaba.com/html/security/0506241_poc.htm. данные как PHP-сценарий и выполнить его.
URL производителя: browser.netscape.com/ns8/product/ URL производителя: www.phpbb.com.
default.jsp. Решение: Установите последнюю версию (2.0.16) с сайта
Решение: Способов устранения уязвимости не существу- производителя.
ет в настоящее время.
Составил Александр Антипов

№7, июль 2005 59


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

OPEN-XCHANGE – СВОБОДУ ГРУППАМ!


Многие из вас задумываются об альтернативе таким Groupware-продуктам, как MS Exchange
и Lotus Notes. Наконец, нам стала доступна свободная версия Novell/SUSE Linux Open-Xchange-
сервера (SLOX).

ПАВЕЛ ЛЕБЕДЕВ

O
pen-Xchange (OX) базируется на компонентах с от- тифицировать продукты или услуги, их соответствующих
крытым исходным кодом, таких как веб-сервер, поч- владельцев.
товый сервер c IMAP, база данных и сервер дирек-
торий. Сервер почти целиком написан на JAVA с присутс- Подготовим окружение для OX
твием элементов на языке С для участков, которые требу- Введем переменные для простоты написания и понима-
ют большей безопасности. OX предоставляет пользовате- ния:
лю такие модули: портал, календарь, контакты, адреса, за- ! OX_home=/usr/local/openxchange – папка, в которую бу-
дачи, проекты, документы, знания, закладки, доска голо- дет установлен OX;
сований, форум, веб-интерфейс для почты. Доступ к сер- ! OX_install=/home/user/OX – в эту папку будем склады-
веру OX можно получить из многих браузеров и програм- вать файлы, требуемые для установки;
мных пакетов, например: KDE Kontact, Apples iCAL, Konquer- ! p_dir=/usr/ports – папка, где лежит дерево портов Free-
or, Mozilla Suite и многих других, основанных на открытых BSD.
стандартах и интерфейсах. Также можно подключаться из
MS Outlook или Palm-устройств с помощью OX-клиента, ко- Для компиляции, инсталляции и работы OX потребуется
торый доступен для скачивания с сайта. установить такие программы из коллекции портов:
В данной статье как операционную систему для OX бу- ! shells/bash – мощный интерпретатор команд, требует-
дем использовать FreeBSD версии 5.3, с локально уста- ся для запуска OX и просто в повседневной жизни ад-
новленными пакетами: Apache2/Tomcat, Postfix/Cyrus, Post- мина;
greSQL, OpenLDAP и т. д. Но это не говорит о том, что вы ! security/sudo – программа для ограниченной раздачи
жестко привязаны к такому набору компонентов. OX пре- прав администратора пользователям, нужна для запу-
красно работает на многих UNIX/Linux-подобных системах. ска OX-сервера;
Связки пакетов можно менять по вашему вкусу или основы- ! java/jdk15 – Sun’s Java Development Kit под FreeBSD;
ваясь на уже установленных программных комплексах. На- ! www/jakarta-tomcat5 – веб-сервер, позволяющий запус-
пример, Apache2/Tomcat можно заменить на Apache1.3/jserv, кать Java Servlet и JavaServer Pages;
Postfix/Cyrus на Exim/Сourier, использовать внешние базы ! lang/perl5.8 – язык программирования Perl;
данных, серверы директорий, почтовые серверы и т. д. ! www/apache2 – очень распространенный веб-сервер;
До того как вы приступите к установке OX, чтоб луч- ! devel/apache-ant – основанная на Java утилита для сбор-
ше представлять себе, как выглядит система, ее возмож- ки приложений;
ности, интерфейс пользователя, рекомендую посмотреть ! net/openldap22-server – сервер директорий LDAP.
скриншоты (http://mirror.open-xchange.org/ox/EN/community/
screenshots.htm), поработать в demo-режиме с порталом и Java
веб-интерфейсом для почты (http://mirror.open-xchange.org/ Мы будем устанавливать Native JDK для FreeBSD (http://www.
ox/EN/community/online.htm). freebsd.org/java/install.html). Напомню, что при установке Java
Будьте внимательны! Автор не несет ответственнос- понадобится около 2 Гб свободного места для раздела, на
ти за возможную потерю данных при использовании дан- котором будет происходить компиляция пакета. Также для
ной статьи. этого потребуются исходники и бинарные архивы Java.
Все бренды и названия продуктов являются или мо- Замечание: файлы надо скачать самостоятельно в свя-
гут быть торговыми марками и используются, чтобы иден- зи с лицензионными ограничениями. Для этого надо заре-

60
администрирование
гистрироваться на сайте www.sun.com, а потом со страни- > tar xzvf jdom-1.0.tar.gz
> sudo mv ./jdom-1.0 /usr/local/jdom
цы http://www.sun.com/software/java2/download.htm, выбрав
платформу Java(TM) SDK 1.5.0, скачать:
! jdk-1_5_0-src-scsl.zip Tomcat
! jdk-1_5_0-bin-scsl.zip Установим сервлет-сервер и проверим его работу, для
этого нужно запустить сервис Tomcat и пройти по ссылке
Со страницы http://www.eyesbeyond.com/freebsddom/ja- http://127.0.0.1:8180. В результате должна появиться стра-
va/jdk15.html: ница с информацией о Tomcat:
! bsd-jdk15-patches-1.tar.bz2
> cd $p _ dir/www/jakarta-tomcat5
> sudo make install clean
И положить архивы в папку $p_dir/distfiles. > sudo /usr/local/etc/rc.d/020.jakarta-tomcat50.sh start
Как написано в BUILD, для начала процесса компиля- > lynx http://127.0.0.1:8180
ции нужен рабочий javac-компилятор. По умолчанию порт
ставит java/linux-sun-jdk14, но можно использовать и род-
ной java/jdk14 и java/linux-blackdown-jdk14: Perl + модули, требуемые для OX
Из дерева портов нам нужно установить следующие ком-
> cd $p _ dir/java/jdk15 поненты:
> sudo make install
! devel/p5-Storable
Замечание: если процесс завис, нужно остановить его ! devel/p5-Time-Local
нажатием <Ctrl-C> и добавить Linux proc-файловую систе- ! net/p5-URI
му командами: ! net/p5-perl-ldap
! www/p5-CGI.pm
> sudo kldload linprocfs
> sudo mount -t linprocfs linprocfs /compat/linux/proc
! converters/p5-MIME-Base64
! converters/p5-Convert-ASN1
Запускаем процесс компиляции еще раз, предвари- ! security/p5-Net-SSLeay
тельно почистив порт java/jdk15 от уже скомпилирован- ! security/p5-Digest-MD5
ного кода. По окончании проверяем, если вывод команды ! security/p5-Authen-SASL
java -version похож на приведенный ниже, значит, установ- ! security/p5-IO-Socket-SSL
ка прошла успешно: ! textproc/p5-XML-NamespaceSupport
! textproc/p5-XML-SAX-Base
> sudo make clean && sudo make install clean
> java -version
Установка perl-модулей происходит так же, как и обыч-
java version "1.5.0-p1"
Java(TM) 2 Runtime Environment, Standard Edition
ных портов, например, установим devel/p5-Storable:
(build 1.5.0-p1-root_08_apr_2005_22_00)
Java HotSpot(TM) Client VM > cd $p _ dir/devel/p5-Storable
(build 1.5.0-p1-root_08_apr_2005_22_00, mixed mode) > sudo make install clean

Для работы OX потребуются дополнительные jar-ком-


поненты: PostgreSQL
! mail.jar – http://java.sun.com/products/javamail/downloads/ Установим SQL-сервер и добавим автоматический запуск
index.htm при старте системы. Для этого в файл /etc/rc.conf внесем
! activation.jar – http://java.sun.com/products/javabeans/ строку: postgresql_enable=”YES”:
glasgow/jaf.html
! xerces.jar – http://xml.apache.org/xerces2-j/download.cgi > cd $p _ dir/databases/postgresql80-server
> sudo make install clean
! jdom.jar – http://www.jdom.org/dist/binary
Запустим скрипт инициализации базы данных OX. Сле-
На момент написания статьи были использованы сле- дует напомнить, что пароль для пользователя openxchange
дующие версии jar-архивов: в PostgreSQL-сервере будет использоваться при конфигу-
! javamail-1_3_2.zip рировании OX в директиве --with-dbpass=:
! jaf-1_0_2-upd.zip
! Xerces-J-bin.2.6.2.tar.gz > sudo /usr/local/etc/rc.d/010.pgsql.sh initdb
> sudo /usr/local/etc/rc.d/010.pgsql.sh start
! jdom-1.0.tar.gz
После этого добавляем пользователя и создаем базу:
Теперь создадим папки и распакуем в них архивы:
> sudo su -l -m pgsql
%createuser –pwprompt
> cd $OX _ install
> unzip javamail-1 _ 3 _ 2.zip Введите имя нового пользователя: openxchange
> 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 Разрешить новому пользователю создавать базы данных? (y/n) y
> tar xzvf Xerces-J-bin.2.6.2.tar.gz Разрешить новому пользователю создавать пользователей? (y/n) n
> sudo mv ./xerces-2 _ 6 _ 2 /usr/local/xerces CREATE USER

№7, июль 2005 61


администрирование
%createdb -O openxchange -E UNICODE openxchange ! OX-RU-Groupware.0.7.5.tar.gz
CREATE DATABASE ! OX-RU-Webmail.0.7.5.tar.gz

Кроме этого, для работы OX с PostgreSQL надо скачать Далее делаем такие операции:
JDBC (http://jdbc.postgresql.org).
В портах есть версия 8.0 databases/postgresql-jdbc, но > cd $OX _ install
> tar xzvf open-xchange-0.7.5.tar.gz
мы предлагаем использовать коннектор версии pg74.215. > cd open-xchange-0.7.5
jdbc3.jar, скачать который можно с сайта http://jdbc.post-
gresql.org/download.htm: Чтобы посмотреть возможные опции конфигурации, вы-
полняем команду:
> sudo mkdir /usr/local/jdbc
> sudo cp pg74.215.jdbc3.jar /usr/local/jdbc > ./conÞgure -help

Apache2 и Ant Конфигурируем, компилируем и устанавливаем пакет


Настала очередь веб-сервера, установим его и настро- OX. При этом обратите внимание на опцию --with-dbpass=
им автозапуск. Также установим утилиту для сборки и укажите тот самый пароль, который задан для пользова-
приложений. Для автозапуска Apache2 при старте сис- теля openexchnge в PostgreSQL.
темы в файл /etc/rc.conf добавляем строку: apache2_
enable=”YES”. > ./conÞgure –preÞx=$OX _ home \
> --enable-webdav --enable-doc \
> --with-mailjar=/usr/local/javamail/mail.jar \
> cd $p _ dir/www/apache2 > --with-activationjar=/usr/local/jaf/activation.jar \
> sudo make install clean > --with-jdomjar=/usr/local/jdom/build/jdom.jar \
> cd $p _ dir/devel/apache-ant > --with-xercesjar=/usr/local/xerces/xercesImpl.jar \
> sudo make install clean > --with-jsdkjar=/usr/local/jakarta-tomcat5.0/common/lib/ ↵
servlet-api.jar \
> --with-jdbcjar=/usr/local/jdbc/pg74.215.jdbc3.jar \
Для соединения сервлет-сервера Tomcat и веб-серве- > --with-dbpass=open \
> --with-runuid=www –with-rungid=www
ра Apache2 нам потребуется установить модуль mod_jk. > make
На данный момент есть 2 версии этого модуля – mod_jk > sudo make install
и mod_jk2, но так как mod_jk2 официально больше не под-
держивается, использовать его не будем. Опираясь на ре- На данный момент у нас есть установленный OX и его
комендации разработчиков, вместо него возьмем www/ окружение, приступим к пост-инсталляционному конфигу-
mod_jk-apache2. рированию.

> cd $p _ dir/www/mod _ jk-apache2 Login.pl (Perl/CGI)


> sudo make install clean
Настроим и проверим окно авторизации пользователя OX:

LDAP > cd $OX _ home/share/perl/


> sudo cp login.pl login.pm /usr/local/www/cgi-bin/
Для работы OX надо собрать LDAP-сервер с эксперимен- > sudo /usr/local/etc/rc.d/apache2.sh start
тальной функцией ACI (inside-the-tree access controls). Эта > lynx http://127.0.0.1/cgi-bin/login.pl
функция дает контроль над правами объекта в дереве.
Замечание: если окно ввода имени и пароля пользо-
> cd $p _ dir/net/openldap22-server вателя OX не появилось, нужно смотреть настройки и лог-
> sudo make -DWITH _ ACI install clean
файлы, веб-сервера Apache2.
Добавляем автоматический запуск при старте системы
и разрешаем слушать только на внутреннем интерфейсе, Servlets
для этого в файл /etc/rc.conf добавляем строки: Настроим servlet-движок так, чтоб он обрабатывал запросы
OX. Для этого скопируем нужные файлы из пакета OX.
slapd _ enable="YES"
slapd _ ßags='-h "ldap://127.0.0.1/"'
> cd /usr/local/jakarta-tomcat5.0/webapps
> sudo mkdir -p servlet/WEB-INF/classes ↵
servlet/WEB-INF/lib
Установливаем OX и настраиваем > sudo cp $OX _ home/share/servlets/*.class ↵
./servlet/WEB-INF/classes
взаимодействие с окружением > cd servlet/WEB-INF/

Инсталляция OX Создаём файл web.xml с таким содержимым. Этот файл


Все готово для начала инсталляции OX. Первым делом требуется для того, чтобы Tomcat понимал, как обрабаты-
необходимо скачать исходники OX с сайта (www.open- вать запросы к groupware и webmail:
xchange.org). Я взял исходники версии 0.7.5, так как для
нее на момент установки была русификация. Нам потре- <?xml version="1.0" encoding="ISO-8859-1"?>
буются файлы: <!DOCTYPE web-app
! open-xchange-0.7.5.tar.gz PUBLIC "-//Sun Microsystems, Inc.// ↵

62
администрирование
DTD Web Application 2.3//EN" worker.list=test
"http://java.sun.com/dtd/web-app _ 2 _ 3.dtd"> worker.test.port=8009
worker.test.host=localhost
<web-app> worker.test.type=ajp13
<display-name>Servlet OpenXchange</display-name> worker.test.lbfactor=1
<description>Servlet OpenXchange 0.7.5</description> workers.tomcat _ home=/usr/local/jakarta-tomcat5.0
workers.java _ home=/usr/local/jdk1.5.0
<servlet>
<servlet-name>intranet</servlet-name>
<servlet-class>intranet</servlet-class>
<display-name>OX Groupware</display-name>
<description>OX</description> PostgreSQL
</servlet> С базой данных PostgreSQL проведем те же операции, кото-
<servlet-mapping> рые написаны в [1], сначала инициализируем базу, а потом
<servlet-name>intranet</servlet-name> наполним данными из файла, который идёт с пакетом OX:
<url-pattern>/intranet</url-pattern>
</servlet-mapping>
> sudo su -l -m pgsql
<servlet>
<servlet-name>webmail</servlet-name> %psql -U openxchange openxchange < $OX_home/share/init_database.sql
%psql -U openxchange openxchange
<servlet-class>webmail</servlet-class>
openxchange=>INSERT INTO sys_gen_rights_template values
<display-name>OX Webmail</display-name>
openxchange->('now','admin','now','','default_template','y','y','y','y',
<description>OX</description>
openxchange(>'y','y','y','y','y','y','y','y','y','y','y','y','y','y','y',
</servlet> 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');
<servlet-mapping> openxchange=> \q
<servlet-name>webmail</servlet-name>
<url-pattern>/webmail</url-pattern>
</servlet-mapping> Также потребуется изменить файлы конфигурации
servers.conf в папках:
</web-app>
! /usr/local/openxchange/etc/groupware
Скопируем jar-файлы для Tomcat из установленно- ! /usr/local/openxchange/etc/webmail
го пакета OX и проверим правильность работы Tomcat,
просмотрев в браузере вывод http://127.0.0.1:8180/servlet/ Для того чтобы OX получил доступ к созданной нами
intranet: базе данных, нужно изменить:

> cd /usr/local/jakarta-tomcat5.0/webapps/servlet/WEB-INF/lib NAS _ CON _ CLASS _ NAME: ↵


> sudo cp $OX _ home/lib/*.jar . jdbc:postgresql://localhost/openexchange
> sudo chown -R www:www /usr/local/jakarta-tomcat5.0/webapps/ NAS _ CON _ USER: openexchange
> 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 на

Если сервер ответил: NAS _ CON _ CLASS _ NAME: ↵


jdbc:postgresql://localhost/openxchange
NAS _ CON _ USER: openxchange
No running Server found. Please inform the Administrator!

это говорит о том, что всё идет нормально, продолжаем


настраивать OX. OpenLDAP
Приступим к настройке сервера директорий. Обратите внима-
mod_jk ние на то, что, если поменять суффикс «dc=example,dc=org»
Настроим взаимодействие Apache2 и Tomcat с помощью на что-то более родное типа «dc=good-domain,dc=ua», то это
mod_jk. Для этого добавим в файл /usr/local/etc/apache2/ надо будет сделать во всех файлах конфигурации (до за-
httpd.conf, такие строки: пуска OpenLDAP), а именно:
! /usr/local/etc/openldap/ldap.conf
LoadModule jk _ module libexec/apache2/mod _ jk.so ! /usr/local/etc/openldap/slapd.conf
<IfModule mod _ jk.c> ! /usr/local/openxchange/share/init_ldap.ldif
JkWorkersFile /usr/local/etc/apache2/workers.properties
! /usr/local/openxchange/etc/admintools.conf
JkLogFile /var/log/apache2/mod _ jk.log
JkLogLevel error Изменяем конфигурацию OpenLDAP. Для этого в файле
JkMount /servlet/* test
/usr/local/etc/openldap/ldap.conf добавляем строки:
Alias /servlet "/usr/local/jakarta-tomcat5.0/webapps/servlet"

<Location "/servlet/WEB-INF/"> BASE dc=example,dc=org


AllowOverride None HOST localhost
deny from all
</Location> а в файл /usr/local/etc/openldap/slapd.conf такие:
</IfModule>
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
Скопируйте /usr/local/etc/apache/workers.properties.sam- include /usr/local/etc/openldap/schema/nis.schema
ple в workers.properties. Измените hostname. Убедитесь, что include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/openxchange/share/openxchange.schema
две последние строки с правильными путями, в нашем слу-
чае файл должен выглядеть так: pidÞle /var/run/openldap/slapd.pid

№7, июль 2005 63


администрирование
argsÞle /var/run/openldap/slapd.args Возвращаемся в пункт PostgreSQL и смотрим, наша ба-
database bdb за называлась openxchange, а OX использует для доступа
sufÞx "dc=example,dc=org" базу openexchange, находим и исправляем строки, в фай-
rootdn "cn=Manager,dc=example,dc=org"
rootpw secret ле /usr/local/openxchange/etc/admintools.conf, который отве-
directory /var/db/openldap-data чает за конфигурацию сервера:
index objectClass eq
index uid,mailEnabled,cn,sn,givenname, ↵
lnetMailAccess,alias,loginDestination eq,sub DEFAULT _ SQL _ DB="openxchange"
DEFAULT _ SQL _ USER="openxchange"

Теперь запускаем OpenLDAP: Запускаем еще раз и получаем в ответ:

> sudo /usr/local/etc/rc.d/slapd.sh start LDAP Success


SQL Success

Редактируем файл /usr/local/openxchange/share/init_ Теперь добавим группу:


ldap.ldif и меняем пароль для доступа к базе:
> sudo $OX _ home/sbin/addgroup _ ox –group=developers
userPassword: {CRYPT}newmailadminpass
Added Group developers to LDAP

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

> perl -e 'print crypt(YOURPASSHERE, ↵ Apache2 / Website


pack("C2",(int(rand 26)+65),(int(rand 26)+65)));'
Настроим взаимодействие веб-сервера и OX. Для этого со-
где YOURPASSHERE – пароль для доступа к OpenLDAP. здаем папки в директории data веб-сервера и скопируем в
Теперь импортируем данные для OX из файла /usr/local/ них контент, который идет вместе с OX.
openxchange/share/init_ldap.ldif командой:
> cd /usr/local/www/data
> sudo mkdir -p cÞntranet/webmail
> sudo slapadd -l $OX _ home/share/init _ ldap.ldif > cd $OX _ home/share/groupware/data/
> sudo cp -R images css javascript ↵
/usr/local/www/data/cÞntranet/
Создадим символические ссылки для OX на ldap.conf: > cd $OX _ home/share/webmail/data/
> sudo cp -R images css javascript ↵
> sudo ln -s /usr/local/etc/openldap/ldap.conf ↵ /usr/local/www/data/cÞntranet/webmail
$OX _ home/etc/groupware/ldap.conf
> sudo ln -s /usr/local/etc/openldap/ldap.conf ↵
$OX _ home/etc/webmail/ldap.conf Хранилище файлов
Создадим хранилище данных, для этого запустим скрип,
который на медленных машинах, с многими файловыми си-
Добавляем пользователя стемами, может выполняться довольно долго.
Так как многие скрипты в папке /usr/local/openxchange/sbin Как написано в [2], файл sbin/correctfilespool в качест-
используют в качестве оболочки /bin/bash, а оригиналь- ве интерпретатора содержит «#!/bin/sh», но, скорее всего,
ное расположение bash в FreeBSD /usr/local/bin/bash, сде- это какая-то модификация bash. Так что поменяем «#!/bin/
лаем символическую ссылку и добавим первого пользо- sh» на «#!/usr/local/bin/bash». Также скрипт sbin/correctfile-
вателя OX: spool использует GNU seq для счета от 0 до 255, но в со-
ставе FreeBSD ее нет. Для решения проблемы можно вы-
> sudo ln -s /usr/local/bin/bash /bin/bash брать два пути. Первый поставить порт sysutils/coreutils и
> sudo $OX _ home/sbin/adduser _ ox \
> --username="test" \ заменить все seq на gseq. Второй вместо seq использовать
> --passwd="test" \ программу jot, идущую в стандартной поставке FreeBSD, и
> --name="Pavel" \
> --sname="Lebedev" \ везде заменить «seq 0 255» на «jot 256 0».
> --maildomain="example.org" \
> --ox _ timezone="Europe/Kiev" > cd $OX _ home/sbin/
> sudo sh ./correctÞlespool
Если скрипт запустить от обычного пользователя, он
выдаст:
Русификация интерфейса
Execute as root...or make sure slappasswd is in PATH
Перейдем в папку, где лежат архивы, скачанные с сайта
Запускаем от root, появилась надпись зеленого цвета, OX, раз архивируем и установим русификацию для Group-
что с LDAP все хорошо, а красным цветом, что база open- ware и Webmail:
exchange в PostgreSQL не существует:
> cd $OX _ install
LDAP Success > tar xzvf ./OX-RU-Groupware.0.7.5.tar.gz
psql: FATAL: database "openexchange" does not exist
> sudo cp -r ~/opt/html/RU ↵
$OX _ home/share/groupware/data/templates/
SQL Error > sudo cp -r ~/opt/locales/RU.dlc ↵
Deleting User from LDAP $OX _ home/etc/groupware/locales/

64
администрирование
> rm -r ./opt ps axwww | grep -E '.*java.*-DappName=groupwareApp' | ↵
> tar xzvf ./OX-RU-Webmail.0.7.5.tar.gz grep -v grep | awk '{print $1}'
> 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 su $USER -s /bin/bash $OX _ BIN >> $LOGFILE 2>&1 &

Теперь надо открыть файл login.pm. в папке /usr/local/ Далее можно пробовать запустить openxchange:
www/cgi-bin и для добавления возможности выбора языка
интерфейса изменить строку: > sudo $OX _ home/etc/init.d/openexchange start

my $languages = ['DE','EN']; Если появились ошибки при старте groupware, webmail


и sessiond, нужно по аналогии со скриптами из папки /usr/
на local/openxchange/sbin в папке /usr/local/openxchange/etc/
init.d для всех файлов заменить командный интерпретатор
my $languages = ['EN','RU']; с «#!/bin/sh» на «#!/bin/bash».
После пробных неудачных запусков выяснились еще не-
Замечание: если после перезапуска Groupware, Web- которые изменения, которые нужно внести. Для файлов в
mail и Apache2, появится ошибка в файлах webmail.log или папке /usr/local/openxchange/bin изменить командный интер-
groupware.log: претатор с «#!/bin/sh» на «#!/bin/bash» и заменить строку:
Language RU is in the wrong version SERVER=$(test "$HOSTTYPE" == "i386" && echo "-server")
Значит установлена неправильная версия OX-русифи-
кации. Скачайте пакет русификации с такой же версией, на
как и устанавливаемый пакет OX.
Как, оказалось, для отображения иконок панели в ру- SERVER=$(test "$HOSTTYPE" == "FreeBSD" && echo "-server")
сифицированном интерфейсе потребуется создать папки
RU и скопировать в них содержимое папок EN. Или как в Хочется обратить внимание на то, что скрипт /usr/local/
примере сделать ссылку: openxchange/etc/init.d/openexchange с опцией start будет ра-
ботать, но вот опция status и stop работать не будут. Это свя-
> sudo ln -s ↵ занно с тем, что в FreeBSD очень длинная командная стро-
/usr/local/www/data/cÞntranet/images/top/EN ./RU
> sudo ln -s ↵ ка с опциями, в выводе команды ps укорачивается до на-
/usr/local/www/data/cÞntranet/webmail/images/top/EN ./RU звания команды, и однозначно определить, что запущено
под этой командой, будет невозможно.
Для проверки после старта openexchange советую зайти
Запускаем ОХ по адресу: http://server_ip/cgi-bin/login.pl, где server_ip – адрес
Вот наступил долгожданный момент первого запуска OX. Что- вашего сервера, ввести логин и пароль созданного пользо-
бы вступили в силу сделанные изменения в настройках веб вателя, выбрать groupware, язык локализации RU и нажать
сервера и сервера сервлетов, нужно перезапустить службы login. Во время входа портал будет медленнее работать. Но
Apache2 и Tomcat, для этого надо выполнить такие команды: это нормально, OX проверяет новую почту для пользователя,
а почтовый сервер еще не настроен. По наступлению тайм-
>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
В следующей статье вы узнаете, как настроить допол-
Перед запуском OX нужно отредактировать скрипты: нительную функциональность OX-сервера:
! /usr/local/openxchange/etc/init.d/groupware ! почтовый сервер для работы с OX;
! /usr/local/openxchange/etc/init.d/sessiond ! настройка доступа через webdav;
! /usr/local/openxchange/etc/init.d/webmail ! безопасные соединения HTTPS;
! контроль над доступом к данным пользователей.
на предмет того, что в FreeBSD используется синтаксис ко-
манды ps, отличный от GNU/Linux ps. Для этого нужно за- Литература:
менить «ps xao “%p %a”» на «ps xao “pid args”», и раском- 1. Файл INSTALL из архива пакета OX.
ментировать строки: 2. Установка OX на FreeBSD от Peter Schober – http://homep-
age.univie.ac.at/peter.schober/OX_on_FreeBSD.html.
sudo -u $USER $OX _ BIN >> $LOGFILE 2>&1 & 3. Форум OX – http://www.open-xchange.org/cgi-bin/simple-
ps xao "pid args" | grep -E ↵
'.*java.*-DappName=groupwareApp' | grep -v grep | ↵ forum.cgi.
awk '{print $1}' 4. Документация по установке на другие операционные
системы – http://www.open-xchange.org/oxwiki/OXInstal-
После этого надо закомментировать строки: lations.

№7, июль 2005 65


hardware

Linux
inuxBIOS
BIOS – ФУНДАМЕНТ ДЛЯ LLinux
inux??

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


кластерных системах, технология LinuxBIOS за 5 лет
оказалась настолько универсальной, что может быть
сегодня использована не только в серверах, но и в
рабочих станциях. Так что же это – еще одна Basic Input/
Output System или что-то большее?
АНТОН БОРИСОВ

L
inuxBIOS является альтернативой му используют промежуточные чипы, но, по мере инициализации определен-
обычным BIOS [1], выполняет те известные как мосты. Первая шина – ных ресурсов.
же самые функции, что и выпус- это FSB (Front Side Bus) – системная Фазы запуска LinuxBIOS (рис. 2):
каемые фирмами AMI (American Mega- шина, на большинстве персоналок она ! Обрабатываются инструкции, ко-
trends), Phoenix (Phoenix Technologies), соединяет процессоры между собой и торые инициализируют процессор,
IBM, DELL и некоторыми другими, толь- между северным мостом. Серверный лишнюю виртуальную память в ми-
ко на порядок быстрее, т.е. в 10-20 раз. мост в свою очередь соединяет про- нимальной конфигурации (32-бит-
LinuxBIOS производит инициализацию цессор с шиной памяти и PCI-шиной. ную адресацию), а также другие
оборудования, проверку на исправ- На диаграмме показан только один се- ресурсы, необходимые для вклю-
ность модулей памяти и собственно на- верный мост, хотя их может быть и не- чения памяти (например, I2C-ши-
чинает загрузку операционной систе- сколько. На платформах с процессо- ну). Затем производится сброс ке-
мы уже после 3 секунд (!) после вклю- рами AMD Opteron, например, исполь- ша процессора.
чения питания. Многие коммерческие зуется свой северный мост к каждому ! Происходит старт кода, отвечаю-
изделия затрачивают на эту же проце- процессору, и системная шина соеди- щий за дальнейшую настройку про-
дуру от 30 до 60 секунд. В дополнение няет только конкретный процессор к цессора и установку параметров
ко всему, LinuxBIOS может быть скон- своему северному мосту. Другими сло- памяти.
фигурирован уже из-под самого Linux вами, не существует общей системной ! Загружается объектный «C»-код
во время работы. шины для Opteron. из Flash-памяти в оперативную па-
Южный мост, который почти всегда мять. Объектный код может быть
Структура LinuxBIOS расположен на 0-й PCI-шине, является сжатом виде (заархивирован).
Прежде чем начать, проведем неболь- следующим мостом в схеме. Задача ! Выполняется код, который функ-
шой экскурс в современную архитекту- южного моста – соединять PCI-шину с ционирует только при настроенной
ру персональных ЭВМ. ПЭВМ состоит устройствами с набором более медлен- памяти. Происходит сканирование
из набора чипов, в первую очередь са- ных устройств и отвечать за функции и инициализация всех аппаратных
мого большого и любимого – процес- записи/чтения BIOS Flash (рис. 1). ресурсов.
сора, затем чипа с графическим про- Когда ПЭВМ включается или же ! Дополнительная фаза, в ходе ко-
цессором и контроллера клавиатуры, идет на перезагрузку, процессор пе- торой происходят финальная на-
далее из соединяющих всё это богатс- редает управление на адрес, который стройка и затем старт операцион-
тво шин данных. традиционно располагается на самой ной системы.
Шина – это набор одного или не- вершине памяти (TOM – Top Of Memo-
скольких проводников, которые сое- ry) за вычетом 16 байт. То есть на архи- LinuxBIOS содержит опциональ-
диняют между собой два или более тектурах 8086 это был адрес 0xffff0, на ную возможность старта при наличии
чипа. Некоторые шины используют платформах с современными процес- проблем с обычным BIOS. Такая под-
два провода – сигнальный и «землю», сорами этот адрес – 0xfffffff0. На пер- держка добавляется при компиляции
другие используют десятки или сотни воначальном этапе единственным язы- проекта. Дополнительный код прове-
проводников. ком, который понимает машина – это ряет сохранность CMOS-памяти и оп-
Сильно упрощенная схема PC-архи- машинный код (Ассемблер). Маши- ределяет, был ли удачным старт ПЭВМ
тектуры представлена на рис. 1. Раз- на активируется в несколько этапов. в предыдущей попытке. Если нет, то ис-
ные типы шин не могут быть напря- В результате, LinuxBIOS переходит из пользуется альтернативная загрузка. В
мую соединены между собой, поэто- одной фазы в другую последователь- таком случае используется LinuxBIOS-

66
hardware
Так получилось, что некоторые тех- открытие Джефом Гарзиком (Jeff Gar-
нологические разработки 1999 года zik) следующего факта – автор проек-
послужили толчком для начала проек- та STPC BIOS предоставляет в обще-
та. В какой-то степени это и появление ственный доступ свой труд. Так, STPC
1 Мб модулей FLASH-памяти на систем- BIOS становится фундаментом новой
ных платах и широкое использование структуры LinuxBIOS. Дальнейшая ра-
PCI-шины, которая заменила устарев- бота над кодом потребовала постоян-
шую ISA-шину. Также показательно, что ной реорганизации, чтобы проект смог
Linux начал работать на таких машинах, поддерживать многие системные пла-
как SGI Visual Workstation, на которых ты и логику, таким образом был зало-
использовался свой вариант BIOS. жен хороший фундамент для дальней-
Что казалось ясным на том этапе, шего развития.
так это то, что если бы удалось скре- Следующие шесть месяцев были
Рисунок 1. Упрощенная схема стить Linux с кодом в BIOS, то цели бы- посвящены запуску LinuxBIOS на но-
классической PC-архитектуры. ли бы достигнуты. Linux настраивает вых платформах. Первой платфор-
Мосты – это логика, которая соединяет
одну шину с другой аппаратные средства намного лучше, мой без использования графических
нежели варианты BIOS того дня. Тре- средств настройки (как в классических
бовалось написать простейший загруз- программах BIOS Setup) стала систем-
чик BIOS, который бы в свою очередь ная плата Intel L440GX+, за которой
пускал ядро Linux. Дальнейшая иници- последовала SiS 630. Именно с этого
ализация была бы прерогативой Linux. момента, т.е. с приходом фирмы SiS в
Таким образом, возникло выражение – проект, началась новая эра. Компания
«Пусть этим займется Linux!» предоставляла схемотехнику, техниче-
Прежде чем начался полномасш- скую поддержку, ассемблерный код,
табный LinuxBIOS проект, в декабре т.е. действительно серьезно подошла
1999 года была продемонстрирова- к тому, чтобы запустить LinuxBIOS на
на работа под названием «LOBOS», в своем продукте.
ходе которой ядро Linux грузилось из Вскоре выяснилось, что Linux мо-
Flash-памяти и дальше передавало уп- жет делать, а чего нет. Выяснилось,
равление опять Linux-ядру, но находя- что ядро 2.2, с которым тогда работа-
щемуся на жестком диске. ли в проекте, не способно с нуля про-
извести инициализацию PCI-шины.
Проще и быстрее Этим пришлось заниматься LinuxBIOS.
Самый простой способ достичь резуль- Пришлось вытащить код из Linux и с
тата в Open Source-среде – это найти небольшими изменениями использо-
решения, которые уже работают. Поэ- вать непосредственно в LinuxBIOS, до-
тому следующим логическим шагом в бавляя по мере необходимости расши-
развитии проекта стал поиск програм- рения. Также вскоре выяснилось, что
много обеспечения схожей тематики. загрузка происходит настолько быст-
Джеймс Хендрикс (James Hendricks) ро, что IDE-диски не успевают старто-
вместе с Дейлом Вебстером (Dale вать. Но вскоре и эта проблема была
Рисунок 2. Фазы запуска LinuxBIOS Webster) нашли нечто похожее в про- успешно решена.
образ, который позволяет загрузиться екте OpenBIOS. После ознакомления По истечении следующих девяти
с другого, гарантированного источни- с проектом за пять дней удалось со- месяцев LinuxBIOS успешно работал
ка, например, по сети. здать тестовый вариант на платформе на двух платформах, будучи написан-
Intel L440GX+. Она загружалась, прав- ным почти полностью на C. Корпора-
Корни и эволюция да, не с холодной загрузки (когда сис- ции стали проявлять интерес к разра-
LinuxBIOS тема первоначально выключена и за- батываемому продукту. Так, VIA и Acer
Проект LinuxBIOS был начат в Нацио- тем включается), а с горячего старта. предоставили спецификации на свои
нальной Лаборатории Лос Аламос (Los Чтобы добавить эту функциональность новые продукты, таким образом так-
Alamos National Lab – LANL) в сентя- (возможность холодного старта) при- же была включена поддержка для их
бре 1999 года под руководством Рона шлось затратить пять месяцев. плат. Джеймс Хендрикс начал работу
Минниха (Ron Minnich). В предыдущие Выяснилось, что ассемблерный код над SMP-поддержкой тем же летом.
восемь лет он занимался построени- не сможет стать языком LinuxBIOS-про- Патчи стали включаться в разработку
ем кластеров всех видов, в частности екта. Проект OpenBIOS почти полно- Linux-ядра, а не как расширения в Linux-
в 1994 году он подготовил свой пер- стью состоял из ассемблерных вста- BIOS. С этой стороны Linux-ядро стало
вый кластер на базе PC. Всё это вре- вок, и было проблематично добавить походить на унипроцессорное – добав-
мя BIOS был краеугольным камнем в что-то новое, свое. Неудивительно, ление поддержки новых процессоров
создании больших кластеров. что следующим шагом было удачное стало занимать меньше времени.

№7, июль 2005 67


hardware
Летом того же года к проекту при- чале пятого начинает проявляться за- Успех в LANL показателен. В тре-
соединился Linux NetworX, и Эрик Бье- интересованность крупных фирм в бованиях министерства по энергети-
дерман (Eric Biederman) стал ключе- данном проекте. Так, в 2003 г. было ке США (а именно оно в конечном ито-
вой фигурой при добавлении подде- продано продуктов, основанных на ге является заказчиком LinuxBIOS)
ржки Alpha-архитектуры. Он также LinuxBIOS, на сумму 30 миллионов для постройки 2 последних класте-
произвел реорганизацию стартового долларов. По сравнению с 2000 г., ког- ров значилось – «необходимо постро-
кода управления памятью. Сотрудни- да продаж таких продуктов не было. ить на основе LinuxBIOS». Всего же на
чество с Linux NetworX продолжает- Неплохое начало, не правда ли? данную работу предназначалось осво-
ся и по сей день – фирма является са- ить около 19 миллионов долларов. Те
мым крупным продавцом систем на ос- Аппаратные платформы компании, которые не захотели участ-
нове LinuxBIOS. Также немаловажной LinuxBIOS работает на многих плат- вовать в движении проекта LinuxBIOS,
заслугой Эрика является создание ар- формах. Официально поддерживают- не смогли отреагировать на данный за-
хитектуры LinuxBIOS следующей, вто- ся более 50 системных плат. Многие каз. Те же, которые предвидели нечто
рой версии. платы похожи друг на друга и компа- подобное, были подготовлены. Пред-
В конце года участники проекта нии используют код от одной систем- видение в данном случае сыграло зна-
выступали на Atlanta Linux Showcase ной платы, запускают на другой. По- чительную роль.
2000 и там познакомились со Стивом этому шансы, что LinuxBIOS зарабо-
Джеймсом (Steve James) из Linux Labs. тает на «неподдерживаемой» моде- Выводы
Это партнерство позволило менее чем ли, достаточно высоки. Это возможно LinuxBIOS прошел длинный путь за че-
за месяц построить 13-узловой клас- в том случае, когда системные платы тыре года – от стадии «Это возможно»
тер на базе LinuxBIOS для Supercom- собраны на одной аппаратной основе, до «Сделано!». LinuxBIOS использует-
puting 2000. т.е. северный и южный мосты, а также ся везде – от огромных кластеров до
К следующему, 2001 году Linux Net- схема инициализации совпадают как встраиваемых (embedded) систем, в
worX завершила портирование под Al- для заявленной системной платы, так MP3-плейерах, портативных класте-
pha-платформу для машин DS10. Был и для «неподдерживаемой». рах и т. п.
построен кластер из 104 машин клас- LinuxBIOS работает на 64- и 32-бит- LinuxBIOS позволяет построить
са DS10, все под управлением Linux- ных процессорах. Среди них: Alpha, системы без громадного PC-багажа.
BIOS. Машины грузились значитель- K8, K7, PowerPC, P4, PIII, PII, Cyrix (VIA), Их можно оптимизировать под Linux
но медленнее, нежели системы на Geode (сейчас AMD) и SC520 (AMD). и сделать еще более компактными и
Pentium, поэтому для выхода в рабо- Список системной логики слишком простыми. Для таких систем находит-
чий режим требовалось примерно 50 обширный, чтобы упоминать. Форм- ся применение.
секунд, но все-таки скорость была до- факторы: от малых систем (PC/104), Проект сейчас находится в своей
статочно высокой. По сравнению с тем до самых больших K8. Портирование второй стадии, LinuxBIOS V2. За че-
немодифицированные машины за то под IBM PPC 970 сейчас находится в тыре года 6 видов процессоров, более
же время успевали выполнить лишь развитии. 50 системных плат и огромный багаж
тест памяти. опыта. Сейчас для переноса на новую
Портирование под Alpha-машины Секреты успеха систему требуются дни, по сравнению
продемонстрировало, что проект мож- развития LinuxBIOS с месяцами, как было раньше. Влия-
но перенести и на другие платформы. Исторически сложилось, что произ- ние проекта на мир вычислений толь-
Для того чтобы LinuxBIOS заработал на водители аппаратного обеспечения ко начинается!
64-битных системах, пришлось немно- очень рьяно хранили в секрете специ- Когда готовилась эта статья, глав-
го переработать программный код – фикации выпускаемых процессоров, ный идеолог проекта Ron Minnich вы-
раньше он ориентировался в основ- чипсетов, системных плат. Как полу- пустил статью об использовании Linux-
ном на 32-битные системы. чилось, что разработчики свободно- BIOS в разработке учебной мини-раке-
С 2001 года пришли новые разра- го проекта получили столь секретные ты. Подробности смотрите в [3, 4].
ботчики (всего их сейчас 11 человек) и сведения? Очень просто – если компа- На этой оптимистичной волне раз-
продолжился перенос на другие плат- нии не видят выгоды, то они и не вы- решите с вами распрощаться до сле-
формы. Одна из них – это AMD Opteron. пустят эту информацию. С другой сто- дующего выпуска, в котором мы не-
Оказалось, что все-таки некоторые роны, как только появляется интерес, посредственно займемся настройкой
процедуры лучше выполнять именно то развитие происходит с удивитель- LinuxBIOS для аппаратной системы
в LinuxBIOS, нежели в Linux, напри- ной скоростью. VIA EPIA-M.
мер, SMP-инициализацию. На примере Бросая беглый взгляд на сегод-
SMP-инициализации для платформы няшнюю ситуацию, можно сказать, что Ссылки:
AMD K7 SMP стало ясно, что некоторые два фактора повлияли на успех – бо- 1. http://en.wikipedia.org/wiki/BIOS.
процедуры лучше выполнять именно в гатство выбора. Богатство выбора за- 2. http://www.linuxbios.org.
LinuxBIOS, нежели в Linux. ключалось в разнообразии системных 3. http://www.linuxjournal.com/article/
Ожидалось, что производители плат, чипсетов и процессоров. Создав 8120.
поддержат начинание. Но прошло че- прецедент, производители сами стали 4. http://www.linuxjournal.com/article/
тыре года развития, и вот только в на- подтягиваться. 8310.

68
hardware

УДАЛЕННО УПРАВЛЯЕМ
BIOS SETUP

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

К
омпьютеры семейства IBM PC тановки очередного пакета обновле- ем своей работы BOOT-block распако-
долгое время рассматривались ния операционная система «умерла», вывает основной код BIOS (так назы-
как недорогие рабочие станции стала жертвой хакерской атаки или ваемый BIOS extensions, или вторич-
и сервера на их основе начали стро- просто зависла. Во всех этих случаях ный загрузчик) и передает ему управ-
ить лишь недавно. Разработчики уве- стандартные средства удаленного уп- ление. Вторичный загрузчик сканиру-
личили количество процессоров, до- равления уже не работают и приходит- ет PCI-шину и выполняет окончатель-
бавили поддержку коррекции памяти, ся приближаться к серверу вплотную, ную инициализацию оборудования –
отказоустойчивые дисковые массивы что достаточно затруднительно. Даже распознает IDE-диски, при необходи-
и прочие прелести, однако полное пре- если сервер расположен на соседнем мости выводит интерактивный редак-
вращение в сервер так и не наступи- этаже, намного предпочтительнее уп- тор BIOS Setup, распределяет систем-
ло. В частности, сохранилась пробле- равлять им без отрыва от своего лю- ные ресурсы между PnP-устройства-
ма удаленного администрирования. бимого кресла, чем бегать с дискетами ми и, наконец, считывает boot-сектор
Операционные системы семейства (лазерными дисками) туда-сюда. с гибкого или жесткого диска.
Windows NT поддерживают удален- И это действительно можно сде- Таким образом, BIOS, установлен-
ный контроль лишь формально. Да- лать! Существуют по меньшей мере три ные на картах расширения, получа-
же такие программы, как Remote Ad- пути, о которых я и хочу рассказать. ют управление на самой ранней ста-
min, выполняют ограниченный спектр дии инициализации, задолго до того,
простейших операций, и на полноцен- Удаленный контроль как начинается подсчет контрольной
ное обслуживание сервера по сети не за BIOS суммы CMOS или распаковка вторич-
способны. В мире UNIX дела обстоят Порядок загрузки BIOS в общих чер- ного загрузчика. Кстати говоря, боль-
чуть-чуть получше, но проблемы все тах выглядит так. Первым получает шинство утилит «прожига» BIOS не
равно есть. управление BOOT-block (загрузочный трогают BOOT-block и даже если про-
Вот, например, BIOS отказывает- блок или первичный загрузчик, не пу- жиг прошел неудачно, ISA-слоты рас-
ся грузиться, предлагая нажать <F1> тать с boot-сектором!). Он выполняет ширения все-таки инициализируют-
для входа в BIOS Setup или <F2> для инициализацию основного оборудова- ся. С PCI-слотами все обстоит намно-
загрузки с параметрами по умолча- ния (оперативная память, контроллер го сложнее, и в общем случае они до-
нию (см. рис. 1). Но сервер находится прерываний, системный таймер и т. д.), ступны только из вторичного загруз-
в другом конце города, да еще в по- сканирует ISA-шину и подключает BIOS чика (а он гибнет при неудачном про-
мещении, ключей от которого у адми- всех обнаруженных устройств (напри- жиге). Некоторые производители, на-
нистратора нет. Знакомая ситуация, не мер, SCSI-контроллеров, видео-, се- пример ASUS, включают в BOOT-block
правда ли? Другой вариант: после ус- тевых карт и т. д.). Перед завершени- специальный драйвер для работы с

70
hardware
PCI-шиной, чтобы материнс- Все управление происхо-
кая плата могла инициализи- дит либо через telnet, либо
ровать видеокарту и хоть что- через веб-браузер. Как бу-
то вывести на экран, даже ес- дет удобнее администратору.
ли основной код BIOS повер- На сервере может быть уста-
жен. Но мне не известен ни новлена практически любая
один BIOS, BOOT-block кото- операционная система: Win-
рого мог бы работать с шиной dows 2000/2003 (Advanced
AGP или PCI-express. Server, Data Center, Terminal
Следовательно, все, что Server, Standard или Enterprise
нам нужно, – изготовить «фик- Рисунок 1. BIOS отказывается грузиться до тех пор, Edition), Novell NetWare 5.1, 6.0,
пока не будет нажата клавиша <F1> или <F2>
тивную» ISA- или PCI-кар- Red Hat Advanced Server2.1,
ту, установить на ней «свой» BIOS и имеется возможность подключать уда- Red Hat Linux 7.3/8.0, SuSE Linux En-
запрограммировать его на удален- ленный дисковод и привод CD-ROM, terprise Server V7/V8 и некоторые дру-
ное управление. Когда-то я «дораба- без которых не обходится ни одна пе- гие (см. рис. 4).
тывал» древние сетевые карты (кото- реустановка системы. Это просто фан- Карту можно приобрести в магази-
рые просто выбрасывались), превра- тастика! Всегда можно загрузиться с не или заказать по Интернету непос-
щая их в «пульт» удаленного управле- Live CD и посмотреть, что случилось с редственно в самой Hewlett-Packard.
ния, позволяющий редактировать на- сервером и сохранить уцелевшие дан- Она обойдется в $399, которые явно
стройки BIOS по локальной сети. Это ные на любой носитель, который толь- стоят того! В принципе можно найти
совсем несложно сделать! Достаточно ко будет под рукой. Это усиливает бе- производителя и подешевле, но в от-
уметь программировать на Ассембле- зопасность системы, поскольку сер- ношении цена/функциональность этой
ре и чуть-чуть разбираться в архитек- вер, оснащенный «Remote Insight», мо- карте равных нет, тем не менее она да-
туре «железа» (см. рис. 2). жет вообще не иметь никаких съемных лека от идеала. Исходных текстов про-
Впрочем, корпеть над отладчиком носителей! шивки нам никто не даст, и дорабо-
совсем необязательно, все можно ку- Кстати, о безопасности. Remote In- тать «напильником» под свои конкрет-
пить и готовое. Такие платы (они назы- sight поддерживает SSL и 128-битное ные нужны ее не удастся (теоретичес-
ваются Remote Boards) выпускает мно- шифрование, что позволяет ему фун- ки это возможно, но очень затрудни-
жество фирм. Обычно они представ- кционировать даже на незащищенных тельно). К тому же качество реализа-
ляют из себя стандартную VGA-кар- каналах (а других каналов в распоря- ции протоколов шифрования находит-
ту с интегрированным COM-портом, к жении рядового администратора за- ся под большим вопросом. Возможно,
которому подключается внешний мо- частую просто не оказывается). в карте присутствуют отладочные лю-
дем. В некоторых моделях ки или переполняющиеся бу-
имеется Ethernet-порт. Его феры, которые позволят ата-
можно воткнуть в DSL-модем кующему захватить штурвал
или соединить со Switch. Че- управления в свои руки ( см.
рез эти порты передается ко- рис. 5)!
пия экрана на удаленный мо- Этих недостатков лише-
нитор и принимаются коман- на PC Weasel 2000 от одно-
ды от клавиатуры, в результа- именной компании. Вместе с
те чего IBM PC превращается самой платой покупатель по-
в самый настоящий «мейн- лучает полный исходный код
фрейм» и физического до- прошивки и лицензию на пра-
ступа к нему уже не требует- во его изменения. Это все та
ся (см. рис. 3)! Рисунок 2. Удаленное редактирование настроек BIOS Setup же самая VGA-плата, только
по терминалу — это реальность!
Большой популярностью вместо Ethernet-порта на ней
пользуется модель Remote In- находится контроллер UART
sight от Hewlett-Packard, кото- (он же стандартный COM-
рая вставляется в PCI-слот и порт типа 16550). К сожале-
управляется через 10/100 Мбит нию, ее функциональность на-
Ethernet-порту. Она подде- много беднее. Поддержива-
рживает как текстовые, так и ются только текстовые виде-
графические режимы (вплоть орежимы и отсутствуют уда-
до 1280х1024/256 цветов), пи- ленные приводы, правда, со-
тается от внешнего источни- храняется возможность «на-
ка, что позволяет ей «нажи- жать» серверу на «Reset» или
мать» на кнопки «Power» и посмотреть POST-коды, что-
«Reset». В дополнение к уда- бы сразу оценить масштабы
ленной мыши и клавиатуре Рисунок 3. Удаленная настройка дисков неисправности (см. рис. 6).

№7, июль 2005 71


hardware
шенно иной подход. Свое название они Smart IP Extender Switch Over IP. Пер-
получили по трем первым буквам: Key- вая стоит в районе $800, вторая… –
board, Video-monitor и Mouse. Коммута- $3500. Для банков и прочих денежных
тор представляет собой автономное учреждений такая сумма, может быть,
устройство, подключаемое к компью- и подойдет, но вот для мелкой конто-
теру через стандартные PS/2 и DB-15 ры – навряд ли. Кончено, порывшись
VGA-коннекторы. Их сигнал преобра- в магазинах, можно найти KVM-ком-
зуется в цифровой поток и передается мутатор и подешевле, но лучше соб-
на соседний KVM-терминал, подклю- рать систему удаленного управления
Рисунок 4. Плата удаленного управления ченный к удаленному компьютеру. Гру- самостоятельно.
Remote Insight от Hewlett-Packard бо говоря, мы как бы подключаем кла-
виатуру, мышь и монитор очень длин- Как это работает,
ными кабелями (см. рис. 8). или Удаленный контроль
Можно настраивать BIOS Setup или своими руками!
рассматривать Windows, свалившуюся Для создания собственной системы
в синий экран, но ни удаленных диско- удаленного управления нам понадо-
водов, ни даже возможности нажать на бится любая PCI-карта и материнская
Reset у нас нет, то есть иллюзия пол- плата, поддерживающая работу с PCI-
Рисунок 5. Еще одна плата удаленного
управления – PC Weasel 2000 ного физического доступа оказывает- шиной через BOOT-block (например,
ся не такой уж и полной. Зато подде- ASUS). На борту карты обязательно
рживаются практически все видеоре- должна присутствовать «кроватка» с
жимы и в код BIOS не вносится ника- BIOS. На худой конец BIOS может на-
ких изменений, а в критических инфра- ходиться в отдельной микросхеме, ко-
структурах это очень актуально. Внед- торую несложно выпаять с платы и вот-
рять посторонний эмулятор в банковс- кнуть в программатор. К сожалению,
кий компьютер нам попросту не дадут, сетевые карты с «внешним» BIOS вы-
поскольку эта технология не сертифи- ходят из употребления и найти их ста-
цирована, а вот у KVM-коммутаторов новится все сложнее и сложнее. Сов-
все необходимые сертификаты, как ременные Ethernet-контроллеры интег-
Рисунок 6. Инженерное меню,
высвечиваемое PC Weasel 2000 правило, имеются (см. рис. 9). рируют BIOS в микросхему чиспета, и
Подавляющее большинство мо- мы уже не можем ничего с ним сделать
ISA-вариант обойдется вам в $250, делей рассчитано на управление не- (только не перепутайте BIOS с панель-
а PCI – во все $350. Не слишком ли сколькими серверами с одного тер- ной для Boot-ROM, это совсем не од-
большая цена за открытую лицензию минала, при этом сигнал пускается но и то же!).
при урезанной функциональности? Не по экранированной витой паре с мак- Вот и приходится пересаживать-
торопитесь с выводами. Исходные тек- симальной длиной в несколько сотен ся на SCSI-контроллеры, цены на ко-
сты – великая штука! Можно купить од- метров. Это совсем не Ethernet и в се- торые упали до 10$-14$. Разумеется,
ну плату и установить ее на неограни- тевой концентратор его вставлять не- речь идет о простейших моделях, но
ченном количестве машин. Клониро- льзя! Для реального удаленного уп-
вать аппаратное обеспечение нам не равления по Интернету или модему
понадобится. Если слегка переделать нам потребуется установить допол-
прошивку можно обойтись и стандарт- нительный компьютер, принимающий
ными компонентами, но об этом – чуть KVM-сигнал и с помощью специально-
позже. Сначала познакомимся с диа- го программного обеспечения ретран-
метрально противоположным клас- слирующий его в «удобоваримую» се-
сом устройств удаленного управления, тевую форму. А это нехорошо! К счас- Рисунок 7. Плата удаленного
среди которых, возможно, притаилось тью, некоторые модели поддерживают управления типа eRIC enhanced
Remote Management Card
устройство вашей мечты (см. рис. 7). работу по модему или локальной сети.
Такой тип KVM-коммутаторов называ-
KVM, или Удаленный ется «over IP», хотя здесь не обходится
контроль продолжается без вариаций. Просто загляните в спе-
Главный недостаток VGA-плат с моди- цификацию: если там встретится что-
фицированным BIOS состоит в том, что то похожее на LAN или Dial-Up, это то,
они требуют вскрытия корпуса серве- что нам нужно (рис. 10)!
ра, что не всегда желательно. К тому Довольно хорошо зарекомендо-
же техника перехвата изображения и вала себя фирма Minicom, в ассорти-
эмуляция клавиатурного ввода далека менте которой можно обнаружить по
от идеала и чрезвычайно конфликтна. меньшей мере две подходящие моде-
KVM-коммутаторы исповедуют совер- ли – Phantom Dial-Up Remote Access и Рисунок 8. KVM-коммутатор за работой

72
hardware
ведь нам ничего, кроме BIOS, не грабить весь вывод на экран и
нужно! Поэтому, даже дешевая передавать его на удаленный
модель будет работать ничуть компьютер («грабить» – вполне
не хуже дорогой. Заботиться о легальный термин, позаимство-
сохранении работоспособнос- ванный у англоязычных инжене-
ти контроллера не обязатель- ров, которые говорят в этом слу-
но. Намного проще переписать чае «grab», звучит грубовато, за-
BIOS с чистого листа, чем до- то почестному).
бавлять свои собственные моду- Разумеется, без сложностей
ли в уже существующий (одна- здесь не обходится. Поскольку в
ко при желании это можно сде- процессе инициализации BIOS
лать) (см. рис. 11). вектора прерывания могут пе-
Дополнительный UART-кон- реустанавливаться многократ-
троллер приобретать не нужно. но, одной лишь модификации
Лучше воспользоваться тем, что таблицы прерываний (т.е. клас-
встроен в материнскую плату, сического способа перехвата)
а при желании можно задейс- Рисунок 9. Схема подключения KVM-коммутатора будет явно недостаточно. Да,
для удаленного управления через Интернет
твовать еще и интегрирован- или по модемному соединению мы можем изменить far-указа-
ный Ethernet или любое другое тель по адресу: 0000h:10h*size
средство коммуникации. of(DWORD) == 0000h:0040h,пе
Разработка прошивок обыч- ренаправив его на свой собс-
но ведется на Ассемблере, но твенный обработчик, но… че-
при желании можно использо- рез некоторое время контроль
вать и высокоуровневые языки за INT 10h будет утерян. Чтобы
типа Си/Си++. Только ни в коем Рисунок 10. Внешний вид некоторых KVM-коммутаторов
этого избежать, необходимо ус-
случае не используйте стандар- тановить аппаратную точку ос-
тные библиотеки ввода/выво- танова на запись этой ячейки
да и прикажите линкеру отклю- памяти. В этом нам помогут от-
чить Start-Up. Для этого доста- ладочные регистры семейства
точно переименовать функцию DRx. Регистры Dr0-Dr3 хранят
main в нечто вроде MyMain. Пос- линейный физический адрес
кольку Си не поддерживает ба- Рисунок 11. SCSI-контролер с несъемным BIOS (слева), точки останова, а Dr7 опреде-
зирования, откомпилированный он нам не подходит. Справа SCSI-контроллер со съемным ляет условия, при которых она
BIOS, который легким движением руки превращается
код должен быть полностью пе- в плату удаленного управления срабатывает, заставляя про-
ремещаем (то есть выполнять- цессор генерировать прерыва-
ся независимо от базового адреса за- ние должно быть инициализировано ние INT 01h, на котором должен нахо-
грузки в память). Этого можно добить- вручную. В частности, интегрирован- диться наш обработчик, выполняющий
ся, отказавшись от глобальных пере- ный COM-порт еще не имеет ни базо- повторную «экспроприацию» INT 10h
менных и выключив все опции ком- вого адреса, ни IRQ, ведь PnP-менед- у системы.
пилятора, которые могут генериро- жер, распределяющий системные ре- Пример работы с отладочными ре-
вать неперемещаемый код, о котором сурсы, еще не получил управления! гистрами приведен ниже.
мы даже не подозреваем (например, Приходится открывать документацию
контроль «срыва» стека). Если вы не на южный мост чипсета и программи- Листинг 1. Перехватчик передает
управление нашему коду в момент
уверены, что хорошо знаете «задний ровать все железо с нуля. Это самый загрузки Boot-сектора
двор» компилятора, – не используйте низкий уровень «общения» с аппара-
; перехватываем INT 01h
его! Программируйте на Ассемблере. турой! Необычайно сложный, но в то MOV ax, CS
Он не подведет! же время захватывающе интересный! XOR bx,bx
MOV DS,bx
Код прошивки исполняется в 16- К счастью, серверный мост уже час- ; смещение нашего обработчика
разрядном сегменте реального режи- тично инициализирован, поэтому на- MOV [bx], offset our _ vx _ code
; относительно сегмента 0000h
ма, однако никто не запрещает нам пе- страивать контроллер памяти не обя- MOV [bx+2],bx
реходить в защищенный режим и вы- зательно. MOV DS, ax
ходить оттуда, правда, не совсем по- Теперь поговорим о методиках эму- ; устанавливаем точку останова
нятно, зачем это нужно. Использовать ляции и перехвата. Для вывода ин- ; на исполнение
MOV eax,302h
служебные функции BIOS недопусти- формации на экран BIOS использует ; линейный физический адрес
мо, поскольку часть аппаратуры еще свою собственную сервисную службу ; точки останова
MOV ebx,7С00h
не инициирована, да и сам BIOS еще INT 10h. Она же используется на ста-
не распакован. Работайте только че- дии первичной загрузки операционных ; Заносим значения в отладочные
; регистры
рез порты ввода/вывода, однако пе- систем семейства Windows и UNIX. Пе- MOV dr7,eax
ред этим не забудьте, что оборудова- рехватив это прерывание, мы сможем mov dr0,ebx

№7, июль 2005 73


hardware
Прерывание INT 10h поддержива- обыкновенный драйвер-фильтр, рабо- сле – придется подгружать свой драй-
ет свыше сотни различных функций, тающий, как VGA-miniport, и пересыла- вер, «садящийся» поверх стандартно-
номер которых передается в регистре ющий экранный вывод на «нашу» кар- го клавиатурного драйвера и эмулиру-
AH. В частности, 02h управляет кур- ту расширения (рис. 12). ющего ввод.
сором, а 09h печатает символ. Естес- Удаленные диски реализуются
твенно, чтобы грабить вывод на экран, совсем тривиально. За это отвеча-
необходимо уметь отличать одну фун- ет прерывание INT 13h. Функция 02h
кцию от другой и знать, чем именно обеспечивает чтение сектора, 03h –
каждая из них занимается. Описание его запись. Номер сектора передает-
функций можно найти либо в техничес- ся в регистрах CX и DX в CHS-форма-
кой документации на конкретную виде- те. Удаленный CD-ROM реализуется
окарту (а если карта встроена в мате- чуть-чуть сложнее. Если вы не силь-
ринскую плату, то в документации на ны в системном программировании,
серверный мост чипсета), либо в зна- на первых порах лучше ограничиться
менитом Interrupt List Ральфа Брауна, виртуальными дискетами. Между про-
правда, он уже давно не обновлялся и чим, использовать физические диске-
сильно устарел. Последняя версия да- ты совсем не обязательно – удаленная
тируется летом 2000 года. С тех пор машина может работать с их образом,
вышло множество новых карт! Впро- Рисунок 12. Принцип работы платы записанным на жестком диске в виде
чем, базовые видео-функции не пре- удаленного управления файла. Для удаленной переустановки
терпели никаких изменений, и если от- Некоторые системы удаленного Windows NT этот прием вполне подхо-
бросить нестандартные видеорежимы, контроля (например, уже упомянутый дит. А смену виртуальных дискет авто-
все будет работать на ура. комплекс PC Weasel 2000) вместо пе- матизировать совсем нетрудно.
Текстовые режимы грабятся прос- рехвата INT 10h просто грабят видео- В результате мы получим довольно
то замечательно, а вот графические в буфер, что на первый взгляд суще- могучий комплекс удаленного управ-
пропускную способность аналоговых ственно упрощает реализацию. Не ления, и самое главное – очень деше-
модемов уже не вмещаются, и переда- нужно возиться с отладочными реги- вый. Конечно, наше время тоже что-то
ваемую информацию приходится как- страми, рыться в Interrupt List и т. д. На стоит (а времени на разработку и пу-
то сжимать. Самое простое – переда- самом деле даже в текстовом режиме ско-наладку уйдет много), но если та-
вать только изменения, предваритель- имеется множество экранных страниц, кие комплексы изготавливать под за-
но упаковав их по gzip-алгоритму, для а уж про графический мы вообще мол- каз, они быстро себя окупят, тем более
работы с которым существует множес- чим! Причем совершенно неясно, как что на них наблюдается устойчивый
тво готовых библиотек. синхронизовать экранный вывод с его спрос, ведь западные аналоги боль-
Правда, с переходом операционной перехватом. Сканировать видеопамять шинству просто не по карману.
системы в защищенный режим, весь с частой 50-60 Гц вполне реально, но Для завершения картины остается
наш перехват будет «подавлен», и уда- вот запихать награбленные данные в сущая мелочь – удаленный Reset, без
ленный компьютер отобразит унылый модемный канал получится едва ли. А которого наше творение будет непол-
застывший экран. В принципе с этим как это дело будет тормозить! Неуди- ноценно. Ну тут все просто. Достаточно
можно и смириться. Главное, что нам вительно, что PC Weasel 2000 работает подключить к LPT-порту реле, ведущее
подконтролен BIOS Setup и начальная только с текстовыми режимами! к «заветной» кнопке, и проблема будет
стадия загрузки оси, а там можно и Теперь перейдем к эмуляции вво- решена. Из прошивки SCSI-контролле-
стандартным telnet воспользоваться, да с клавиатуры. Мышь рассматривать ра мы можем управлять LPT-портом,
если, конечно, на середине загрузки не будем, поскольку нормальные ад- конечно, не забыв, что перед этим его
Windows не выбросит синий экран. министраторы свободно обходятся и нужно инициализировать.
В своих первых моделях систем без нее. Весь клавиатурный сервис со- Один маленький трюк напоследок.
удаленного управления я поступал так: средоточен в прерывании INT 16h, ко- Если полноценная система удаленно-
отслеживал попытку перехода в защи- торое мы должны перехватить. Когда го управления вам не нужна и всего
щенный режим (а отследить ее можно программа (и в частности, BIOS Setup) лишь требуется запретить BIOS тре-
с помощью все тех же отладочных ре- ожидает нажатия на клавишу, она об- бовать нажатия на клавишу при за-
гистров), переходил в защищенный ре- нуляет регистр AH и вызывает INT 16h. грузке, то без дополнительного обору-
жим сам, устанавливал свои обработ- Конечно, существуют и другие вариан- дования легко обойтись. Достаточно
чики прерывания и отдавал управле- ты, но этот – самый популярный. В этом загрузить прошивку основного BIOS в
ние операционной системе, не позво- случае наш обработчик прерывания дизассемблер и найти все «ругатель-
ляя ей ничего менять. Это работало! должен поместить ASCII-код симво- ные» сообщения. Перекрестные ссыл-
Хотя и сбоило тоже. Универсального ла, нажатого на удаленной клавиату- ки приведут нас к машинному коду, ко-
перехватчика создать не получилось, и ре, в регистр AL и возвратить управле- торый эти строки и выводит. Там же бу-
пришлось учитывать особенности реа- ние. Естественно, все это будет рабо- дет код, ожидающий нажатия на клави-
лизации всех операционных систем. В тать только до перехода операционной шу, который мы должны удалить. Пря-
конце концов я махнул рукой и написал системы в защищенный режим, а по- мой вызов INT 16h используется редко.

74
администрирование hardware
Скорее всего, мы увидим что-то вро- каких проблем с его исправлением не
де CALL xxx, где xxx – адрес функции- возникает. Главное – определить нуж-
обертки. Для достижения задуманно- ные адреса. В этом нам поможет тот
го мы должны заменить CALL xxx на факт, что сам BIOS свой образ не за-
«MOV AX,scan-code», указав скэн-код тирает и в момент загрузки boot-сек-
требуемой клавиши. Например, клави- тора он присутствует в памяти. Доста-
ша <F2> в большинстве BIOS означа- точно написать крошечную ассемблер-
ет «загрузку с настройками по умол- ную программу, считывающую первые
чанию», однако в некоторых случаях 640 Кб нижней памяти и записываю-
может потребоваться нажать <Enter> щую их на гибкий диск, а затем вне-
или <Esc>. дрить ее в boot-сектор. После переза-
Проблема в том, что основной об- грузки системы мы станем обладате-
раз BIOS упакован и защищен конт- лями распакованного BIOS, лежащего
рольными суммами. Практически все по своим «родным» адресам.
разработчики BIOS распространяют Остается только прожечь обнов-
утилиты для распаковки/упаковки и ленный BOOT-block и можно наслаж-
пересчета контрольных сумм, одна- даться бесперебойной работой сер-
ко никакой гарантии, что модифици- вера!
рованный BIOS будет исправно рабо-
тать, у нас нет. Ошибки могут появ- Заключение
ляться в самых неожиданных местах. Полноценный удаленный контроль за
Работа системы становится нестабиль- системой – это реальность! Ассорти-
ной, материнская плата без всяких ви- мент возможных решений необычайно
димых причин начинает зависать и т. д. широк: от готовых (и весьма дорогос-
Разумеется, для серверов это непри- тоящих!) KVM-устройств до более де-
емлемо, поэтому приходится идти дру- шевых, но вместе с тем и более функ-
гим путем. циональных (!) плат расширения, кото-
Вместо того чтобы модифициро- рые большинство программистов лег-
вать упакованный образ основного ко- ко изготовят самостоятельно. Физи-
да BIOS, мы возьмем неупакованный ческий доступ к серверу будет требо-
BOOT-block и добавим в него автомати- ваться только при его ремонте (здесь
ческий патчер, правящий нужные бай- без него никак не обойтись, ведь плос-
ты прямо в памяти, когда распаковка когубцы с отверткой по модему не пе-
уже завершена. Поскольку основной редашь), однако фатальные отказы
код BIOS распаковывается в RAM, ни- происходят не так уж и часто.

Ссылки:
1. Remote Insight «Lights Out» boards – 5. Raritan IP-Reach TR364 – описа-
обзор систем удаленного управле- ние KVM-коммутатора TR364 (на
ния (на англ.): http://www.paul.slad- англ.): http://www.42u.com/tele-
en.org/lights-out/riloe.html; reach_bk.htm;
2. Remote Insight Lights-Out Edition II – 6. Архитектура ввода-вывода персо-
описание платы удаленного управ- нальных ЭВМ IBM PC – электрон-
ления от Hewlett-Packard с возмож- ная версия книги, посвященной
ностью заказа по Интернету (на устройству IBM PC, которую на-
англ.): http://h18004.www1.hp.com/ стоятельно рекомендуется прочи-
products/servers/management/riloe2/ тать перед разработкой собствен-
server-slot-matrix.html; ной системы удаленного управ-
3. PC Weasel 2000 – описание аль- ления (на русском языке): http://
тернативной платы удаленного уп- redlib.narod.ru/asmdocs/asm_doc_
равления, микрокод, который рас- 07.zip;
пространяется по открытой лицен- 7. Ralf Brown Interrupt List – электрон-
зии (на англ.): http://www.realweasel. ный справочник по всем прерыва-
com/intro.html; ниям, портам ввода/вывода, «вол-
4. Технические характеристики ог- шебным» адресам памяти, вклю-
ромного количества систем уда- чая нестандартные расширения и
ленного управления (преимущес- недокументированные возможнос-
твенно KVM-коммутаторов, на ти (на англ.): http://www.ctyme.com/
англ.): http://www.kvms.com; rbrown.htm.

№7, июль 2005 75 75


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

РАЗРАБАТЫВАЕМ ИНФОРМАЦИОННЫЕ СИСТЕМЫ НА PHP


МЕТОДОМ ВИЗУАЛЬНОГО ПРОГРАММИРОВАНИЯ

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

ЕВГЕНИЙ ВОЯКИН
Как построить новку клиентских программ и на него. модулями функционального расшире-
информационную систему Поэтому в последнее время у разра- ния, на клиентской – веб-браузером в
Ни для кого не секрет, что в последнее ботчиков все четче заметно стремле- качестве универсального клиентского
время автоматизированные инфор- ние перенести максимально возмож- программного обеспечения. Этот уро-
мационные системы (ИС) стали сер- ную часть специализированного про- вень реализует возможность инфор-
дцем многих бизнес-процессов пред- граммного обеспечения с клиентских мационного обмена в сети.
приятий и основой общедоступных се- рабочих станций на серверы.
тевых сервисов. Как известно, в боль- Такой подход позволит вам исполь- Какой инструмент
шинстве информационных систем дан- зовать менее сложные компьютеры выбрать разработчику
ные хранятся в БД. Одновременный с минимальным набором программно- Учитывая эти тенденции, многие фир-
доступ к ИС нескольких пользовате- го обеспечения в качестве клиентских. мы направляют свои усилия на разви-
лей реализуется с помощью специа- А это в свою очередь означает сниже- тие и совершенствование технологий
лизированного программного обеспе- ние затрат на аппаратную составляю- и инструментария в области веб-про-
чения, ориентированного на работу в щую системы. При этом разработчи- граммирования. Примерами могут слу-
сети. Чтобы поддержать такое взаимо- ки все чаще основываются на исполь- жить технологии от Microsoft, под кото-
действие, программное обеспечение зовании веб-технологий для доступа рые созданы мощные средства разра-
должно располагаться на обеих сто- к информационным системам. В ар- ботки (к примеру, Interdev), среда Zend
ронах сети – на сервере и на компью- хитектуре системы между клиентским Studio, созданная разработчиками
тере клиента. Безусловно, такой под- программным обеспечением и сервер- языка PHP (см. [1]). Познакомившись
ход имеет недостаток: помимо одно- ной СУБД появляется дополнительный с этими пакетами и осознав, насколько
кратной установки ПО на сервер под- уровень, который можно назвать уров- отличаются их функциональные воз-
ключение каждого нового клиентско- нем веб-транспорта. На стороне сер- можности, у меня сложилось ощуще-
го компьютера подразумевает уста- вера он представлен веб-сервером с ние некой ограниченности в средствах

76
программирование
доброй части программистов, пишу- зуальную среду программирования. Dreamweaver, позволяющий осущест-
щих на PHP. Действительно, предла- Эта среда дает возможность разраба- влять визуальную разработку веб-
гаемая компанией Microsoft среда In- тывать интерфейсы доступа к базам форм и поддерживающий подключе-
terdev содержит всё необходимое для данных посредством веб-технологий ние к MySQL.
построения динамических веб-стра- и в ряде случаев комплексно автома- Технология визуального програм-
ниц, поддерживает визуальное про- тизирует создание ИС в целом. мирования даст вам возможность су-
граммирование интерфейса, параме- щественно сократить время создания
тры оформления документов и работу Что следует программного модуля. Представьте
с базами данных. автоматизировать любой веб-интерфейс к базе данных в
В то же время почти все представ- Разработка любой информационной некой информационной системе. При
ленные на рынке средства разработ- системы не является простой зада- традиционном написании кода с увели-
ки на языке PHP, включая даже доста- чей. Вне зависимости от того, какую чением числа элементов в веб-форме
точно мощную среду Zend Studio, пред- информационную систему бы вы ни время, затраченное вами на создание
ставляют собой лишь развитые текс- проектировали, будьте готовы стол- такой страницы, будет возрастать не
товые редакторы, ориентированные кнуться с некоторыми «классически- линейно, а более стремительными тем-
на работу с текстами на языках про- ми» этапами разработки, а именно пами. Это объясняется тем, что для ре-
граммирования. Тем не менее, имен- вам придется: ализации тех или иных особенностей
но язык PHP, СУБД MySQL или Post- ! спроектировать базу данных (а пе- вам потребуется вводить все больше
greSQL, как показывает практика, на- ред этим будет изучение предмет- переменных, циклов, ветвлений. Ста-
иболее часто выбираются нами при ной области, построение ее моде- нет сложнее отслеживать синтаксис и
разработке целого ряда информацион- ли, разработка логической, а затем логику сценария. Кроме того, при этом
ных систем, особенно на *nix-платфор- физической модели данных в сред- возрастет и сложность базы данных –
мах. Эти средства обоснованно заслу- ствах той или иной СУБД, нормали- наличие большого числа интерфейс-
жили популярность своей простотой и, зация базы и т. д.); ных элементов означает существова-
одновременно с этим мощностью и на- ! запрограммировать базу данных ние соответствующего числа полей та-
дежностью. Кроме того, они доступны непосредственно в СУБД; блиц для хранения значений.
бесплатно, что немаловажно для мно- ! выбрать, как пользователи будут Применение визуальной интегри-
гих разработчиков. получать доступ к данным – то есть рованной среды может снять с вас все
С моей точки зрения, современ- спроектировать интерфейсы (оп- эти трудности. В идеале время должно
ные инструменты разработки на PHP ределить их количество и функци- затрачиваться лишь на определение
должны предоставлять следующие ональные требования к ним, вы- связи интерфейсного элемента веб-
возможности: брать средства и инструменты про- формы с теми или иными данными в
! максимальная автоматизация раз- граммирования, разработать алго- базе. Остальные задачи – включение
работки веб-документов; ритмы); в код сценария тегов HTML, реализу-
! комплексная поддержка разработ- ! осуществить программирование ющих элемент, функций, осуществля-
ки приложений, ориентированных интерфейсов; ющих запросы к базе данных для ото-
на работу с базами данных, воз- ! отладить ИС в целом. бражения значений в элементе, разра-
можно, с поддержкой создания са- ботка структуры базы данных, проце-
мих баз данных; Нетрудно заметить, что данная ра- дуры верификации и во многом отлад-
! поддержка визуальной методики бота потребует от вас значительных ки создаваемого программного кода –
программирования (как у «боль- знаний в как минимум трех областях – должны выполняться для вас средой.
ших братьев» – Delphi, C Builder). программирования, проектирования
баз данных и знания веб-технологий. «Визуализируем»
Частичное решение этих задач Безусловно, если вы гуру в SQL и по- программирование
в той или иной мере успешно дости- стоянно занимаетесь разработками в Как перенести концепцию визуально-
галось различными разработчиками данной сфере, решение этих задач не го программирования в, казалось бы,
средств программирования, но пол- составит труда. Однако для начинаю- изначально «невизуальную» область?
ного комплексного решения этих за- щего программиста, сталкивающегося Ведь по своей сути PHP не является
дач в едином инструменте мне до сих с такой задачей время от времени, ее языком программирования широко-
пор не встречалось. решение займет много времени. го назначения и не позволяет строить
Имея определенный опыт разра- Как я заметил ранее, почти все при- пользовательские интерфейсы. Но в
ботки информационных систем, я опи- званные помочь разработчику в дан- нашем случае от него это и не требу-
шу некоторые методы, которые позво- ной ситуации средства программи- ется. Как известно, основу для инте-
лят перенести технологию визуальной рования на языке PHP по сути пред- рактивного взаимодействия посред-
разработки в область программирова- ставляют собой лишь развитые тек- ством веб-технологий содержит сам
ния на языке PHP. Объединение этих стовые редакторы, поддерживающие язык HTML, позволяющий строить веб-
методов и алгоритмов по работе с ин- работу с текстами на языках програм- формы. Следовательно, «визуализи-
формацией в базе данных позволи- мирования. Исключением, пожалуй, ровав» работу с интерфейсными эле-
ло мне создать интегрированную ви- может являться только Macromedia ментами формы и разработав систе-

№7, июль 2005 77


программирование
му взаимосвязи этих элементов с ба- ционной процедуре разработки при- «Мастерская» и «Редактор». В верх-
зой данных посредством языка PHP, ложений. ней части расположено меню, содер-
мы получим методику визуального «Мощность», или степень, до кото- жащее вызов основных операций, ко-
программирования на PHP в области рой данная среда позволит вам авто- торые могут потребоваться при разра-
разработки веб-интерфейсов для ин- матизировать процесс разработки веб- ботке приложений.
формационных систем. приложений на PHP, вполне сопоста- Закладка «Мастерская» предна-
Можно сказать, что данный подход вима с той, до которой позволяет ав- значена для визуальной разработки
создает достаточный фундамент для томатизировать разработку обычных PHP-приложения. Панель инструмен-
существенной автоматизации процес- приложений хорошо известные среды тов включает восемь кнопок для бы-
са разработки. Замечу, что этот метод, Borland Delphi и C Builder, а в некоторых строго доступа к пунктам меню: соз-
разумеется, не автоматизирует разра- случаях и превосходит их. Так, при ис- дать, открыть и сохранить страни-
ботку любых сценариев на PHP полно- пользовании Синбада для построения цу проекта, вызов свойств страницы,
стью, но он позволяет строить целый интерфейсов к БД результатом рабо- свойств элемента, удаление элемента,
класс приложений на PHP (в частнос- ты программы может быть полностью вызов окна базы данных и преобразо-
ти – веб-интерфейсов к БД), вообще функционально готовый интерфейс, вание, или, по аналогии с другими ви-
не сталкиваясь с кодом сценария на полученный абсолютно без примене- зуальными средами разработки, «ком-
языке PHP. Для многих других прило- ния ручного написания кода. В продук- пиляция» страницы в PHP-код.
жений (отображающих информацию тах Borland визуальное программиро- Палитра компонентов состоит из
из баз данных или содержащих веб- вание позволяет лишь построить поль- набора некоторых, наиболее часто ис-
формы) применение данного метода зовательский интерфейс – окно прило- пользуемых элементов языка HTML
позволит снять с разработчика боль- жения. Любую смысловую связку ин- (параграфы, ссылки, списки и т. п.)
шую часть работы по рутинному напи- терфейсных элементов окна вам при- и интерфейсных элементов для по-
санию кода приложения на языке PHP дется осуществлять вручную. строения веб-форм.
и тегов HTML. Разработка программы осущест- Рабочее поле программы служит
влена на Delphi, Синбад рассчитан на для визуального построения страни-
Среда визуальной выполнение под управлением опера- цы. На это поле из палитры с помощью
разработки ционной системы Microsoft Windows. мыши могут быть перенесены те или
Не найдя «идеальной» среды под свои Работоспособность программы про- иные элементы в соответствии с ваши-
задачи, я решил опробовать данный верена в версиях 98, 2000 Profession- ми задачами. Нажатие на элемент пра-
подход на практике и создать инстру- al, XP Pro, XP Home. вой кнопкой мыши открывает его кон-
мент визуального программирования текстное меню. Таким образом, при по-
на языке PHP самостоятельно. Работа с новым строении страницы вы сталкиваетесь
При создании своей среды, по- инструментом не с ручным вводом тегов языка HTML,
лучившей условное название «Син- Работа в среде предусматривает ре- а с «визуализованными» элементами,
бад» (от «Сетевой ИНтерфейс к БА- дактирование проектов. Каждый про- имеющими такой же внешний вид, ка-
зе Данных»), я не ставил задачи полу- ект предполагает работу со своей БД кой они приобретут при отображении
чить полностью универсальное средс- и имеет ряд настроек – название, ка- страницы в браузере, что значитель-
тво программирования на PHP. Дейс- талог, в котором хранятся файлы про- но нагляднее.
твительно, сложно разработать инс- екта, нацеленность на различные опе- Определять свойства элементов
трумент, более полно использующий рационные системы (кодировки симво- страницы вы можете с помощью набо-
средства языка, нежели Zend Studio, лов Windows-1251, koi-8r, символы пе- ра окон, позволяющих задать имя эле-
созданный разработчиками PHP. реноса строки #13#10 или #10). Также мента и его исходное состояние, закре-
Но обладая меньшими функцио- задаются параметры для подключения пить связь с базой данных и т.п. К при-
нальными возможностями в области к базе данных: ее тип, имя, логин, па- меру, вид окна, управляющего списка-
работы с веб-формами и базами дан- роль, имя сервера и т. п. ми выбора, представлен на рис. 2.
ных, «Синбад» существенно превос- Проект состоит из одной или не- В качестве примера представлены
ходит Zend Studio: он позволяет реа- скольких страниц, работающих с еди- свойства элемента place. Как видите,
лизовать методику визуального про- ной базой данных. Каждая из страниц элемент имеет вид строки с выпада-
граммирования и осуществляет комп- может выполнять одно действие по ма- ющим списком (размер равен 1). Для
лексную разработку компонентов ин- нипуляции с данными, определяемое списка задано наполнение исходны-
формационной системы. назначением страницы. ми данными из таблицы place: исполь-
При этом среда не ограничит вас В свойствах проекта можно также зуются столбец id (для значений эле-
только возможностью разработки ин- определить единые для всех страниц ментов списка) и caption (для тексто-
терфейсов. В конечном итоге приме- проекта шаблоны заголовков и конце- вых меток). При выборе имеется воз-
нение среды позволяет задейство- виков страниц, в которых возможно за- можность определить условие отбора
вать для реализации целого ряда за- дание параметров оформления. строк – в данном случае для напол-
дач программистов существенно ме- Пользовательский интерфейс (см. нения списка используются все стро-
нее высокой квалификации, нежели рис. 1) программы представляет собой ки с id>10.
могло бы потребоваться при тради- окно, состоящее из двух закладок – Преобразование элемента, имею-

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

Рисунок 1. Пользовательский интерфейс среды «Синбад». Рисунок 2. Это окно позволит вам управлять
Режим построения формы свойствами списков выбора
щего эти свойства, в PHP-код приведет Панель инструментов редактора ! выполнять все необходимые опе-
к формированию следующего фраг- содержит кнопки, позволяющие вам рации, связанные с элементом: на-
мента кода (для СУБД MySQL): открыть файл в редакторе или сохра- полнение исходными данными, вы-
нить редактируемый файл, работать бор исходного значения и т. п. – для
<SELECT NAME="place» SIZE="1"> с буфером обмена, редактором ша- сценария с формой; манипуляция
<?php
$rz = mysql _ query("select id, ↵ блонов. Для ввода тегов языка HTML с определенными пользователем
caption from place ↵ редактор имеет дополнительную па- данными в базе данных – для вы-
where id>10 order by 1;");
while ($row = ↵ нель с кнопками (на рис. 4, в левой зываемого сценария.
mysql _ fetch _ row($rz)) { части окна), нажатие на которые при-
print ("<OPTION VALUE=$row[0]> ↵
$row[1]</OPTION>\n"); водит к вставке HTML-тега в позицию Среда начинает построение сценари-
} курсора. ев с файла, в котором будет находиться
?>
</SELECT> Среда предоставляет возможность веб-форма. Прежде всего в текст буду-
создавать свои шаблоны кода, имеет щего сценария включаем шаблон заго-
Нижняя часть окна позволяет опре- систему предиктивного набора иден- ловка, позволяющий определить единые
делить связь с базой данных. В данном тификаторов. Список последней сис- для всех сценариев параметры оформ-
случае выбор строки списка, сделан- темы вы можете изменить по своему ления. Далее определяем взаимное рас-
ный будущим пользователем этой усмотрению. положение друг относительно друга ин-
страницы, повлияет на значения столб- Процедура построения файлов на терфейсных элементов и элементов, от-
ца place_id таблицы events. языке PHP, которую по аналогии с дру- носящихся к языку HTML. Для этого ис-
Возможности визуального пост- гими средами визуального програм- пользуется специально разработанный
роения сценариев не ограничивают- мирования можно назвать компиля- алгоритм. При обработке элементов веб-
ся только элементами веб-форм. Для цией, запускается по окончании поль- форм для них осуществляется генера-
элементов палитры HTML-тегов окна зователем проектирования интерфей- ция кода на языке PHP, отображающего
свойств в первую очередь позволяют са. Вы можете запускать эту проце- элемент в браузере, а также кода, реали-
определить параметры отображения в дуру всякий раз, когда хотите прове- зующего связанные с элементом опера-
браузере или предоставляют нагляд- рить целостность проекта и правиль- ции по наполнению его исходными дан-
ный интерфейс для определения тега ную связанность интерфейсных эле- ными и т. п. Для объектов языка HTML
(например, для параграфов текста). ментов с теми или иными полями ба- генерируем текст тега в соответствии с
При построении кода страницы на зы данных. заданными параметрами.
языке PHP результат помещается в ре- В результате компиляции вы по- При компиляции кода элемента
дактор кода для проверки и корректи- лучите готовый программный код на Синбад проверяет, достаточно ли за-
ровки. Этот редактор (см. рис. 3) со- языке PHP и требуемые теги HTML, дано для этого данных. Если при об-
держит в свою очередь четыре заклад- отображающие всю страницу в целом работке в свойствах встретится ссыл-
ки для работы с текстами. Первые две в соответствии с ее функциональным ка на поле несуществующей таблицы
предназначены для редактирования назначением. или на несуществующее поле (напри-
основного (с формой) и подчиненного Для генерируемого кода опреде- мер, таблица или поле были переиме-
(вызываемого из формы) сценариев, ляются следующие требования. Код нованы после определения связи эле-
образующих страницу. В окно третьей должен: мента с ними), преобразование приос-
помещается текст дампа базы данных, ! отображать все элементы страни- тановится. Вы получите соответствую-
а последняя предназначена для работы цы в таком же порядке, как они бы- щее уведомление с указанием элемен-
в интерфейсе среды с любыми файла- ли расположены вами на рабочем та, а также поля или таблицы, которые
ми по усмотрению пользователя. поле среды при проектировании; не были обнаружены.

№7, июль 2005 79


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

Рисунок 3. Пользовательский интерфейс среды «Синбад». Рисунок 4. Так выглядит спроектированная страница
Режим редактора кода в окне браузера
По окончании обработки всех эле- 2) Применение максимально простых дополнен параметрами оформления с
ментов генерация главного сценария шаблонов кода, упрощающее пони- помощью стилей и т.п.
завершается включением в него тек- мание технологии создания страни- Именно в силу этих особенностей
ста шаблона концевика файла. цы разработчиком и облегчающее (и мой опыт практического примене-
Генерация вызываемого сценария дальнейшую их модификацию; ния Синбада подтверждает это) рабо-
происходит по похожей схеме. Основ- 3) Использование строго ограничен- та с программой значительно ускоря-
ным отличием от описанного механиз- ного набора функций на языке PHP ет разработку интерфейсов к инфор-
ма является то, что в тело подчиненного для работы с базами данных. Име- мационным системам в целом.
сценария встраивается операция по ма- на функций хранятся во внешних
нипуляции данными непосредственно в текстовых файлах, редактирова- Доступ к данным
БД. В случае, когда назначением стра- ние которых позволит вам работать Для проектирования базы данных
ницы является ввод данных, среда про- в среде с практически любой СУБД, Синбад требует наличия в операцион-
верит, достаточно ли информации для поддерживаемой языком PHP. ной системе подключения к СУБД че-
добавления новой записи в таблицу. Ес- рез источник ODBC с именем Sinbad.
ли с каким-либо полем записи не связа- Первый критерий, как может снача- Следует отметить, что вы должны со-
но элемента, то это поле, в зависимости ла показаться, идет в ущерб функци- здать такой источник в операционной
от типа, заполняется либо нулем, либо ональным качествам и возможностям системе до начала работы с програм-
пустой строкой. При этом вам также вы- среды. Однако эта особенность вклю- мой. Среда имеет интерфейс для руч-
водится соответствующее предупреж- чена в программу намеренно. Как по- ного управления структурой базы дан-
дающее сообщение (см. рис. 5). казывает практика, опытные дизайне- ных (см. рис. 6), позволяющий добав-
Пример того, как в окне браузера ры даже после оформления страницы лять и удалять таблицы в базе, управ-
отображается страница, проектирова- с помощью тех или иных автоматизи- лять полями таблиц – удалять ненуж-
ние которой показано на рис. 1, пока- рованных средств «шлифуют» стра- ные, создавать новые, задавать их тип,
зан на рис. 4. ницы вручную, уже после разработки вводить, изменять и удалять данные в
При разработке среды в качестве и отладки программной части. любой из таблиц и т. п.
параметров оптимизации генерируе- Учет данных критериев позволит В случае если непосредственное
мого кода на языке PHP я выбрал сле- вам достичь получения в результате подключение к серверу базы данных
дующие критерии: «компиляции» легкочитаемого высо- посредством источника ODBC невоз-
1) Не требуется сохранять параметры конадежного кода на языке PHP. Этот можно (отсутствует доступ, в вашей
оформления генерируемой страни- код не требует дальнейшей верифи- системе нет источника ODBC требуе-
цы в максимально возможной сте- кации и может быть легко модифици- мого типа и т. п.), можно определить
пени. В результате компиляции ко- рован и использован в качестве осно- источник любого типа, например, Mi-
да в полученной странице не гаран- вы при разработке сложной страницы, crosoft Access Driver (*.mdb), ссыла-
тируется расположение элемен- ющийся на пустую базу данных.
тов точно так же и с такими же При разработке в ней будут со-
расстояниями между элемента- зданы необходимые таблицы. Во
ми, как они располагались на время построения кода сценари-
этапе проектирования. Однако ев (при компиляции) среда также
среда обеспечит соблюдение автоматически выполняет генера-
взаимного расположения эле- цию дампа полученной к моменту
ментов друг относительно дру- Рисунок 5. Выполняется преобразование в PHP-код.
компиляции базы данных. Вы мо-
га; Отладочные сообщения жете перенести этот дамп непос-

80
программирование
редственно в сервер СУБД. тогда с этими данными авто-
Универсальность и перено- матически будут связаны от-
симость дампа достигает- дельные таблицы. Осталь-
ся за счет применения в нем ные атрибуты концерта мо-
для управления структурой гут быть введены через тек-
базы и данными операторов стовые поля и автоматичес-
на языке SQL. ки попадут в главную табли-
Среда предусматривает цу, содержащую помимо этих
возможность определения атрибутов и первичный ключ,
автоматической связи меж- и ключ места проведения.
ду элементом и столбцом од- Разумеется, при постро-
ной из таблиц базы данных. ении сложных многоуровне-
При этом у вас возникает воз- вых систем или при «класси-
можность автоматизировать ческом» подходе к проекти-
процесс разработки структу- Рисунок 6. Встроенный интерфейс управления базой данных рованию информационной
ры базы данных, основываясь на ин- сколько этапов, среди которых мож- системы такой подход является невер-
формации, получаемой из визуально- но выделить: ным – проектирование базы данных
го программирования. 1) изучение предметной области, в ко- должно предшествовать разработке
Пример структуры автоматически торой производится разработка; интерфейса. Но я хочу отметить, что
разрабатываемой базы данных при- 2) построение модели предметной об- такая функциональная возможность
веден на рис. 7. В качестве примера ласти; вполне может быть использована в
приводится интерфейс для базы дан- 3) разработка логической модели целом ряде случаев, когда структура
ных «афиши концертов». данных; базы данных не очень сложна или из-
Таким образом, при построении 4) разработка физической модели начально очевидна.
нового проекта некой информацион- данных в средствах той или иной
ной системы Синбад позволяет пол- СУБД; Что дальше
ностью снять с вас задачу проектиро- 5) программирование базы данных На текущий момент остаются нерешен-
вания базы данных – она будет разра- непосредственно в СУБД. ными некоторые задачи, касающиеся
ботана автоматически. Единственной функциональных возможностей среды
рекомендацией в данном случае будет Создание БД на этапе построения разработки. Требуется разработка ме-
необходимость задавать для элемента интерфейса к ней по сути является ме- ханизма сохранения результатов ком-
осмысленное имя до назначения ему тодом, позволяющим вам в целом ря- пиляции с учетом изменений, сделан-
автопривязки к БД, так как при созда- де случаев получить готовую физи- ных программистом в конечном коде
нии полей таблиц будет использовано ческую модель БД непосредственно программного модуля на языке PHP.
имя элемента. из модели предметной области. Дейс- На текущий момент, если вы отредак-
В классическом случае проектиро- твительно, на этапе создания интер- тировали полученный в результате
вание базы данных выполняется в не- фейса достаточно представлять се- компиляции код, то при последующей
бе лишь модель пред- компиляции его изменения будут по-
метной области. Так, теряны. Также необходима доработка
в нашем примере БД, редактора кода. В среде пока нет сис-
содержащей концерт- темы выделения синтаксических эле-
ную афишу, вам доста- ментов языка различными цветовыми
точно разработать эле- схемами и нумерации строк.
менты интерфейса для Возможно, отмеченные недостатки
ввода свойств пред- будут исправлены в последующих вер-
метной области – на- сиях среды. Также планируется доба-
звания концерта, вре- вить возможность проверки вводимых
мени и места его про- пользователем в элемент значений с
ведения, перечня ар- помощью скриптов на JavaScript.
тистов и прочее. Зада- Разрабатываемый продукт будет
ча проектирования ко- бесплатным, бета-версии в скором
нечных таблиц, ключей времени будут доступны по адресу
и связей в них и т. п. с http://evgy.opennet.ru.
вас снимается. В дан-
ном случае целесооб- Литература:
разно для выбора мес- 1. Воякин Е. Zend Studio 4.0 – новая
та проведения концер- версия, новые возможности. – Жур-
Рисунок 7. Схема автоматизации разработки структуры
та и артиста использо- нал «Системный администратор»,
базы данных вать списки выбора, №2, 2005 г. – 75-79 с.

№7, июль 2005 81


web

ИСТОРИЯ РАЗВИТИЯ САЙТОСТРОЕНИЯ

АЛЕКСЕЙ МОИСЕЕВ
WWW является одним из наиболее динамично развивающихся сервисов глобальной сети
Интернет. За 14 лет развития сайтостроения была проделана большая работа по созданию
существующих стандартов, обеспечивающих не просто существование, а развитие WWW,
благодаря чему можно строить планы на будущее, не совершая ошибок прошлого.
Только полная картина всего, что было и есть, позволит понять, чего именно не хватает
на рынке в данный момент, а значит и определить дальнейший путь веб-разработок.

К
настоящему времени в Интер- Первые шаги «вырос» из более сложного языка
нете уже существует около двух В 1992 году была создана Всемирная SGML (Single Generalized Markup Lan-
миллиардов страниц. Ни одна информационная сеть (World Wide Web guage, ISO 8879) [1]. HTML как стандарт
из возможных тем не ускользнула от или просто Web). Разработчиком тех- для разметки веб-страниц вышел в
упоминаний в Web. Каждую секунду нологии был Тим Бернерс-Ли (Tim Ber- свет в ноябре 1995 года под названием
в Сети добавляется примерно 25 но- ners-Lee). Задача Сети заключалась в «HTML 2.0». После чего были предпри-
вых сайтов. распространении информации посред- няты попытки его модернизации, одна-
ством сетевой компьютерной техноло- ко проект «HTML 3.0» так и не был ре-
Рождение гии. Технология WWW стала развити- комендован интернет-консорциумом.
Со времён создания сети Интернет од- ем идей Gopher. Возможно, тогда потребностям веб-
ним из наиболее известных его серви- В истории было немало учёных, чьи разработчиков вполне отвечал преды-
сов стала «Всемирная паутина» – World мысли опережали время, в котором дущий стандарт. С течением времени
Wide Web. В 1991 году Пол Линдер (Paul они живут. Среди них был и Тед Нель- число пользователей WWW увеличи-
Linder) и Марк П. МакКейгил (Mark P. сон (Ted Nelson), который первым пред- валось, что привело к появлению сре-
McCahill) из Университета Миннесоты ложил концепцию гипертекста в своей ди разработчиков всё более талантли-
создали Gopher (полное название Go- книге «Computer Lib/Dream Machines», вых людей, которых возможности вто-
pher State – штат сусликов, шутливое опубликованной в 1974 году. В середи- рой версии HTML явно не устраивали.
название штата Миннесота). Техноло- не 90-х годов понятие гипертекста рас- То есть паутина всего за два года раз-
гия организации файлов в логическую ширилось и включило в себя идею ги- вилась до «HTML 4.0», который прак-
систему меню обусловила его немед- пермедиа, то есть добавление ссылок тически в неизменном виде использу-
ленное принятие как стандарт в сети на графические видеоклипы и музы- ется и по сей день с незначительными
Интернет. Протокол Gopher является кальные ролики. изменениями.
непосредственным предшественником На основе результатов работ Теда В конце 90-х интернет-консорциуму
концепции и функций WWW. Серверы Нельсона, а также концепции гипер- стало ясно, что HTML не отвечает пот-
Gopher быстро распространились в се- текста он сделал возможным включе- ребностям Web, и любая новая версия
ти Интернет, хотя в них не было гипер- ние графики, типографских текстовых HTML быстро устареет. Поэтому было
текстовых ссылок и графических эле- стилей и самое главное – гипертексто- предложено развивать расширяемый
ментов. Через короткий отрезок време- вые ссылки в веб-страницы. язык разметки: XML (eXtensible Markup
ни стало ясно, что возможностей таких Language) – новый стандарт оформле-
серверов не хватает. «Три кита» ния самых разнообразных докумен-
Самый большой сервер Gopher новой технологии тов, в том числе и веб-страниц. Уни-
принадлежал европейской организа- Основой Web стали три новых техно- кальность XML заключается в его не-
ции CERN (Европейская лаборатория логии: ограниченной расширяемости в си-
физики частиц высокой энергии). Эта HTML (HyperText Markup Language, лу четкой структурированности дан-
организация стала движущей силой язык разметки гипертекста) – язык ло- ных, возможности определения сво-
подключения Европы к Интернету. гической разметки веб-страниц. HTML их тегов и т.д.

82
web
XML так сильно отличается от HTML, Mozilla и недавно открытого кода Inter- ! Хранилище данных представляет
что был разработан XHTML (это осно- net Explorer. собой совокупность сервера уп-
ванный на XML язык разметки гипер- равления базами данных и самой
текста, максимально приближенный к Быстрое развитие базы данных. Однако в некоторых
текущим стандартам HTML. Был опуб- Число пользователей WWW лавино- случаях можно использовать фай-
ликован консорциумом в первый день образно увеличивалось, благодаря лы на жёстком диске.
2000 года как переформулирование чему всё большую роль в развитии
(Reformulation) HTML в XML. паутины стал играть бизнес. Каждый Благодаря шаблонам количество
HTTP (HyperText Transfer Protocol, день создавалось множество интер- HTML-кода сокращается в десятки
протокол передачи гипертекста) ис- нет-представительств компаний, ра- раз. К шаблонам обычно относят так-
пользуется для передачи веб-стра- ботающих в различных сферах рынка. же CSS-код и JavaScript-код.
ниц от сервера к пользовательскому Каждый отдельный сайт представлял Программная часть вполне может
браузеру. собой набор статических HTML-стра- быть написана на любом языке про-
Веб-браузер – программа, необхо- ниц, CSS-таблиц стилей, а также гра- граммирования, однако при этом по-
димая для просмотра веб-страниц. фических файлов. Для оперативного явится чрезмерная сложность отлад-
Практически сразу после создания обновления и своевременного добав- ки и платформозависимость. В начале
Web был создан первый браузер, при- ления новых разделов на сайт было развития CMS использовали Perl (для
чём он распространялся совершенно необходимо держать в штате компа- UNIX-хостингов) и ASP (для Windows-
бесплатно. Браузер назывался Mosa- нии группу веб-разработчиков. Сде- хостингов). Популярность Perl (Prac-
ic, его создали в Национальном цен- лать переоформление (редизайн) та- tical Extraction and Report Language) в
тре суперкомпьютерных приложений кого сайта вообще не представляется те времена можно было объяснить це-
при университете Иллинойса в 1993 возможным, так как для этого необхо- лым рядом причин: простота синтакси-
году. Ничто в истории информацион- димо отредактировать каждую стра- са, большие возможности интерпрета-
ных технологий не распространялось ницу в отдельности. Например, если тора, а главное – каждый администра-
с такой же быстротой. на одну страницу уходит 20 минут, то тор UNIX использовал его для управле-
Более подробную информацию о на 1000 страниц уйдёт примерно 42 ния и настройки системы. То есть люди,
WWW можно найти по ссылке [2], где рабочих человеко-дня, что составля- чья работа хоть как-то связана с UNIX-
есть ответы на все наиболее часто ет чуть более двух недель работы не- подобными системами, уже владели
встречающиеся вопросы. большой группы веб-разработчиков практически всеми необходимыми зна-
Нововведением в стандарте W3C при условии, что в это время им не ниями для веб-разработки. Однако Perl
HTML 4.0 явились листы стилей (style будут давать срочных заданий. В ито- изначально не был предназначен для
sheets), позволяющие отделять содер- ге для переоформления ресурса от- этого. Поэтому параллельно существо-
жание HTML-документов от их пред- дел информационных технологий бу- вали более адаптированные для Web
ставления. Связывая один сценарий дет полностью парализован на отно- языки (интерпретаторы). К ним можно
со всеми страницами ресурса, вы мо- сительно длительное время, что недо- отнести PHP (раньше понималось как
жете изменять внешний вид сразу все- пустимо, за редким исключением. На Personal Home Pages, однако в послед-
го сайта, даже если со страницами в рынке сформировалась потребность нее время расшифровывается как Hy-
данный момент работают пользова- в автоматизированной системе пост- pertext Preprocessor), Python, KixtArt,
тели. В настоящее время существует роения страниц сайта на основе напи- Yo-Script (скриптовый язык, который
стандарт Cascade Style Sheets Level 2 санных статей и HTML-шаблонов. Та- длительное время использовался для
(CSS2), однако полностью его не под- кие системы были названы CMS (Con- отображения страниц в www.yahoo.
держивает ни один браузер. Элемен- tent Management System, системы уп- com) и множество других. Работа над
ты, поддержка которых реализована равления контентом), они, как прави- большинством таких языков прекра-
в тех или иных браузерах, как прави- ло, состоят из трёх частей: щена, однако остальные начали раз-
ло, по разному «понимаются». Даль- ! Статическая часть – HTML-шабло- виваться быстрыми темпами. Напри-
ше всех в этой области продвинулись ны. мер, PHP до 4-й версии обладал рядом
браузеры, выпускаемые под маркой ! Программная часть – в большин- недостатков, не позволявших ему по-
Mozilla (Mozilla, Mozilla ForeFox, Mozil- стве случаев интерпретируемые лучить абсолютную популярность (на-
la ThunderBird). В ближайшее время модули, которые также можно раз- пример, первые версии PHP позволя-
выйдет стандарт Cascade Style Sheets делить по назначению ли писать лишь небольшие скрипты),
Level 3 (CSS3). Исследования [3] пока- ! Пользовательские скрипты, по- однако в 4-й версии все они были уст-
зывают, что в текущее время наибо- казывающие информацию по- ранены. В текущий момент большинс-
лее популярным браузером является сетителям, используя шаблоны тво проектов работают именно на PHP-
Internet Explorer, им пользуются около страниц и информацию из хра- скриптах, однако также встречаются и
89% пользователей WWW. На втором нилища данных. Perl/ASP-движки.
месте Mozilla, у которого около 6,8%. ! Администраторские скрипты
Среди остальных браузеров можно вы- позволяют управлять возмож- Хранилище информации
делить: Opera, Konqueror, Lynx, а так- ностями веб-ресурса, такими В качестве хранилища данных на лю-
же браузеры, построенные на основе как: голосования, анонсы и т. п. бом, сколько бы то ни было весомом

№7, июль 2005 83


web
проекте используется база данных. 1. Порталы. Используются для ин- 4. Форумы – это инструмент для об-
В большинстве случаев это MySQL формационных ресурсов, основ- щения на сайте. Принципиаль-
или PostgreSQL. Они получили широ- ной целью ставят максимальное ное свойство форума заключает-
кую распространённость (особенно упрощение публикации статей и ся в том, что сообщения в нем объ-
MySQL) благодаря тому, что отсутс- новостей. Могут включать в себя единены в треды (от англ. thread –
твует плата за использование обоих нижеследующие типы CMS как са- «нить»). Когда вы отвечаете в фо-
СУБД, а также они существуют под все мостоятельные модули. Наиболее руме на чье-то сообщение, ваш от-
платформы, используемые на WWW- известные представители данного вет будет «привязан» к исходному
серверах. Однако «дёшево хорошо не класса: PHP-Nuke, XOOPS. сообщению. Последовательность
бывает», в случае если от сервера баз 2. Движки без SQL. Данное ответв- таких ответов, ответов на ответы
данных требуются работы с огромными ление в разработке CMS развито и т. д. и создает тред. В итоге фо-
объёмами данных, то приходится ис- наиболее слабо, так как исполь- рум представляет собой древовид-
пользовать Oracle, MS SQL либо дру- зование в качестве хранилища ин- ную структуру, состоящую из тре-
гие СУБД, осуществляющие достаточ- формации файлов вместо таблиц дов.
но быструю работу с большими объё- базы данных сопряжено со мно- 5. Магазины. К магазинам можно от-
мами данных. Однако все они явля- жеством нерешаемых проблем (та- нести любой сайт, при помощи кото-
ются платными. Об этом можно дол- ких как одновременная запись в рого можно заказать какой-либо то-
го спорить. Для большинства CMS не один файл несколькими копиями вар. В данном случае в определение
нужны огромные объемы данных. Важ- скрипта). Достоинство таких CMS «товара» может входить абсолютно
нее скорость обработки SQL-запросов. заключается в том, что они мо- всё, включая время доступа в Ин-
Помимо перечисленных есть множес- гут быть размещены на бесплат- тернет, минуты сотовой связи. CMS,
тво других СУБД, каждая из которых ных хостингах. Есть несколько ре- позволяющие создать виртуальный
обладает как недостатками, так и пре- ализаций данной идеи: Cute News, магазин: MyMarket, osc2nuke.
имуществами по сравнению со своими Gruppy. 6. Групповая работа (Groupware) –
конкурентами. 3. Блог (название «блог» (blog) про- комплекс программного обеспе-
Все выше упомянутые СУБД явля- исходит от английского слова «we- чения, позволяющий организо-
ются SQL-серверами баз данных. Ис- blog». Русский термин – «сетевой вать работу предприятия, отноше-
пользовать что-то работающее не на дневник») – это сайт, на котором ния с клиентами и заказчиками в
технологии Клиент/Сервер не пред- находятся личные заметки авто- Интернете. Обычно представляет
ставляется возможным, так как по ра. В основном заметками являют- закрытую полностью или частич-
ряду причин (например, на разных ся ссылки на сайты, которые кажут- но часть сайта с возможностью от-
платформах существуют различные ся владельцу ресурса наиболее ин- слеживать сроки выполнения пос-
СУБД, каждая ориентирована под тересными, и комментарии к ним. тавленных задач, распределения
свой круг задач) нецелесообразно В большинстве случаев владель- ролей и временных нормативов.
встраивать систему управления ба- цы блогов дают небольшие ком- Возможно, выносить вопросы на
зами данных (СУБД) в интерпретатор. ментарии на приведенные ресур- обсуждения и решения вышестоя-
С момента опубликования стандарта сы, другие же пытаются подробно щего руководства. В большинстве
SQL92 СУБД, работающие на основе описать сайт. Блог может содер- случаев иcпользуются следующие
SQL-предложений, фактически стали жать не только ссылки, но и прос- CMS: dotProject, eGroupWare, More-
единственным стандартом для серве- то электронный дневник пользо- Groupware, phpCollab, PHProjekt.
ров управления базами данных, су- вателя. В эту категорию можно от- 7. Обучение (e-Learning) – дистан-
ществующих в Web. Под SQL-предло- нести следующие CMS: b2evolution, ционная форма обучения с исполь-
жением понимают команду SQL-серве- bBlog. зованием сети Интернет. Онлайно-
ру, однако в отличие от других команд, Сетевые дневники приобретают вая форма обучения уже не один
используемых для управления какими- все большую популярность. Уже год является «маяком», на кото-
либо приложениями ЭВМ, SQL-коман- начинают активно обсуждать, кто рый ориентируются образователь-
ды являются весьма приближенными к же влиятельнее: СМИ или блоги. ные системы разных стран мира,
человеческому языку, возможно, это и Они постепенно входят в жизнь переживающие сложный процесс
есть важнейшая причина, по которой рядового пользователя всемирной реформирования. Процесс их мо-
их называют именно SQL-предложе- паутины – например, в Штатах вы- дернизации все больше связан с
ниями, а не командами. Пример про- ходит телепередача о блогах. Су- реализацией задач информатиза-
стейшего SQL-предложения «SELECT ществует два способа начать вести ции, учитывая все возрастающую
* FROM table_name». блог: воспользоваться специаль- роль информационных и интер-
ным сервисом (например, LiveJour- нет-технологий в современном об-
Итоги развития WWW nal) или установить к себе на сер- ществе и бизнесе. Стратегическим
За несколько лет системы управления вер (платный или бесплатный хос- направлением становится обеспе-
содержимым веб-ресурсов серьёзно тинг) автономный блог, то есть ис- чение интеллектуального разви-
развились, их можно классифициро- пользовать специализированную тия на основе быстрого обновле-
вать по областям применения. CMS. ния знаний в области технических

84
web
наук, а также развития навыков эф- нако ни одно такое решение, на- контентом, кроме рассматриваемой).
фективного использования инфор- сколько мне известно, так и не В принципах работы этой организа-
мационных ресурсов. Таких систем смогло по возможностям и эрго- ции можно почерпнуть наиболее удач-
существует не много: ATutor, Claro- номике хоть немного приблизить- ные идеи: если брать деньги не за са-
line, LogiCampus, Moodle, Segue, ся к вышеупомянутым системам. му CMS, а за её аренду, причём раз-
Site@School. Например, админ. панель хостинга мещать её на своём сервере (тут важ-
8. Базы знаний (KnowledgeBase) net.ru даёт лишь простейшие фун- но учесть все условия к хостингу по-
позволяют накапливать опыт мно- кции управления и способна пока- тенциальных будущих заказчиков), то
жества разработчиков, работаю- зать только то, что может сделать это даст возможность предоставлять
щих (или работавших) в какой-ли- администратор за день работы. более эффективную поддержку кли-
бо одной организации. Каждая та- ентам, постоянно повышать безопас-
кая база знаний имеет свою специ- Альтернатива CMS ность и улучшать качество работы как
фичную структуру, поэтому общих Для того чтобы перевести статический самой системы, так и всего сервера в
решений на данный момент пред- ресурс под управление одной из CMS, целом. При увеличении числа поль-
ложено крайне мало, а точнее толь- необходимо создать его заново. Если зователей такой организации, рабо-
ко одно – Wiki. На этом «движке» на сайте уже имеются сложная струк- ты программистами добавляется ми-
работает широко известная элек- тура и большие объёмы данных, то це- нимум, что позволяет снижать плату
тронная энциклопедия Wikipedia. на вопроса становится ощутимой да- для всех пользователей, а самое глав-
Наиболее известная из существу- же для относительно богатых органи- ное – постоянно расширять возмож-
ющих ныне баз знаний – RFC (Re- заций. Так как продолжение существо- ности системы. Если в первые дни су-
quest For Comment, запрос на ком- вания в старом формате уже не пред- ществования IPI.CONTROL могла лишь
ментирование, обычно описание ставляется возможным, то формирует- управлять содержимым сайтов, теперь
работы с каким-либо протоколом и ся спрос на продукт, позволяющий уп- это полноценный рабочий кабинет ад-
тому подобное, публикуется в виде равлять существующим статическим министратора сайта. В системе реали-
небольшого документа, как прави- сайтом. Спрос порождает предложе- зован принцип единой администратор-
ло, с примером программы.). ние, и вот уже около пяти лет на рын- ской панели. Это можно связать с тем
9. Биллинг (Billing). Программное ке существует продукт IPI.CONTROL фактом, что за последние четыре го-
обеспечение, позволяющее про- (www.ipi.ru). В первом приближении он да в BugTraq не раз появлялись уязви-
вайдерам и реселлерам работать выполняет функции «насадки» на сайт, мости PHPNuke и других CMS, одна-
со счетами клиентов. Такие CMS позволяющей приблизить возможнос- ко о взломах сайтов на базе IPI.CON-
являются неотъемлемой частью ти такого ресурса к функциональности TROL не было ни одного сообщения.
крупной системы учёта потребле- CMS. Текущие возможности системы Безусловно, использование IPI не яв-
ния услуг пользователями. Зада- (в плане CMS) для больших проектов ляется столь массовым, как PHPNuke,
ча же CMS данной категории – в оставляют желать лучшего – IPI пред- по той причине, что последний беспла-
визуализации информации о пре- назначена для малого и среднего биз- тен, а IPI.CONTROL стоит больших де-
доставленных услугах, подключе- неса. Однако профессиональные мар- нег, однако в случае появления бреши
нии новых услуг, изменении теку- кетологи сделали своё дело, что дало в PHPNuke её будут устранять некото-
щих параметров, приёме плате- системе некоторое число постоянных рое (возможно, продолжительное) вре-
жей и т. п. Во всех случаях такие потребителей, ежемесячно пополня- мя, а в случае с IPI можно связаться по
системы пишутся своими силами. ющих бюджет компании, из которого сотовому телефону с директором и вы-
Для примера можно привести бил- идут деньги на дальнейшие разработ- сказать всё, что наболело.
линг-панель RuWEB. В ней созда- ки. Важно отметить, система сделана В следующей части, на основе ана-
но огромное количество тарифных таким образом, что позволяет в лю- лиза текущего состояния WWW, будут
планов, позволяющих пользовате- бой момент прекратить пользоваться сформулированы требования к CMS,
лям платить только за те парамет- её услугами. В этом смысле её мож- отвечающие потребностям пользо-
ры хостинга (трафик, место на жёс- но сравнить с некоторым инструмен- вателей (как бизнеса, так и частных
тком диске, MySQL, PHP, Perl), кото- том (например, отвёрткой), взятым в лиц) завтрашнего дня. Благодаря ко-
рые используются в полном объё- аренду. Пока пользуетесь – платите, личественной и качественной оцен-
ме. Пока ни одна другая фирма (ра- если чувствуете, что некоторое время ке ошибок, появлявшихся в истории
ботающая в этой секторе рынка ИТ- (больше двух-трёх месяцев) вы не бу- развития ресурсо-строения, быть мо-
услуг) не воспользовалась этой, не- дете использовать её, – то можно вре- жет, обозначенный в следующей час-
сомненно, удачной идеей. менно отключиться… или вообще пе- ти путь развития CMS окажется наибо-
10. Администраторская панель хос- рестать пользоваться услугами ком- лее правильным.
тинга. К этому классу относятся та- пании. Возможно, в этом заключается
кие продукты, как «Direct Admin» и одна из причин, почему скрипты сис- Ссылки:
«Control Panel». Немало хостинг- темы не продаются, а сдаются в арен- 1. http://www.w3.org/pub/WWW/Mark-
провайдеров стараются написать ду. Описанное свойство является боль- Up/SGML.
панель управления для пользова- шим плюсом, который пока не реали- 2. http://www.boutell.com/faq.
теля хостинга своими силами, од- зован ни в одной системе управления 3. http://www.securitylab.ru/54639.html.

№7, июль 2005 85


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 используйте следующую команду:
нение к другим средствам сбора статистики можно, но дан-
ная мера оправдывает себя на небольших некоммерческих # rpm -qa | grep gd
проектах. Для компаний, интернет-ресурсы которых исполь-
зуются для продвижения своей продукции или же в реклам- Если пакет в системе присутствует, то на экран будет
ных целях, важно знать несколько основных моментов: выведено его название.
! количество посещений; Основные позиции конфигурационного файла /etc/
! какие разделы наиболее востребованы; webalizer.example.conf выглядят следующим образом:
! с помощью каких запросов пользователи находят ваш
сайт; # Определяет журнал сервера
LogFile /usr/local/etc/httpd/logs/access _ log
! с какого URL пользователь заходил для просмотра.
# Определяет месторасположение отчетов Webalizer
OutputDir /usr/local/etc/httpd/usage
В данном случае целесообразно использовать програм-
мы, которые выдают всю необходимую информацию на ос- # Имя хоста, который мониторится
HostName www.example.com
нове анализа логов веб-сервера. Плюсы:
! несложная настройка большинства из них; # Задает имя файла, в котором будет содержаться информация
# о посещении веб-сервера на протяжении одного года
! возможность с помощью одной программы осущест- HistoryName HistoryName webalizer.hist
влять сбор статистики с нескольких сайтов;
# Возрастающая обработка позволяет использовать несколько
! большая информативность полученных результатов. # относительно небольших файлов журналов вместо одного

86
web
# огромного. Данная опция полезна для больших сайтов,
# период ротации журналов которых меньше, чем период
# ротации обыкновенных веб-серверов.
Incremental

# Задает заголовок отчета. Русские заголовки поддерживаются


# (при условии настроенной локализации системы)
ReportTitle

# Определяет расширение для файлов-отчетов


HTMLExtension

# Позволяет использовать безопасное соединение HTTPS


# для просмотра статистики
UseHTTPS

# Директива PageType указывает расширения файлов,


# которые будут считаться веб-страницами.
PageType htm*
PageType cgi
PageType phtml
PageType php*
PageType pl

#GraphLegend Рисунок 1. Стартовая страница Webalizer


#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

Изменяя эти опции, можно манипулировать «внешним


видом» полученной статистики, количеством строк в таб-
лицах, отображать или нет диаграммы и графики, игнори- Рисунок 2. Статистика кодов отклика
ровать в статистике определенные url, браузеры и т. д.
После инсталляции необходимо отредактировать файл * 2 * * * /usr/local/bin/webalizer
* 2 * * * /usr/local/bin/webalizer ↵
httpd.conf и добавить следующие строки между тэгами сек- -c /etc/call-net.webalizer.conf
ции <IfModule mod_alias.c> и </IfModule>: * 2 * * * /usr/local/bin/webalizer ↵
-c /etc/webalizer.hotofÞce.conf
Alias /usage/ "/home/httpd/usage/" Исходя из соображений не столько безопасности, сколь-
<Directory "/home/httpd/usage">
Options None ко нежелательного попадания данной информации в руки
AllowOverride None наших конкурентов, доступ к результатам по http рекомен-
Order deny,allow
Deny from all дуется закрыть с помощью htaccess.
Allow from 192.168.1.0/24 Как выглядит отображаемая статистика, смотрите на
</Directory>
рис. 1.
Для запуска Webalizer может использоваться несколь- Usage Summary for yourdomain.com. Этот график ви-
ко параметров: зуализирует суммарный трафик за последние 12 меся-
! -c файл – альтернативный файл конфигурации. По умол- цев. Информация будет доступна только с момента запус-
чанию используется файл /etc/webalizer.conf. ка Webalizer на сайте.
! -n name – имя машины, которое будет отображено при Summary by Month. Эта таблица содержит месячную
выводе статистики. статистику, выраженную в цифрах, средние показатели в
! -o каталог – каталог, в который будут помещены файлы день и суммарные показатели за каждый месяц.
статистики. Кликнув по названию месяца (подчеркнуто красной
! -t название – заголовок отчета. чертой), вы сможете получить детализированный отчет за
! -F (clf | ftp | squid) – тип журнала: clf или ftp или squid. каждый месяц.
Monthly Summary. Кликнув по ссылкам, вверху стра-
Для обеспечения сбора статистики с нескольких вир- ницы, вы перейдете в определенный раздел отчета. Ста-
туальных серверов я рекомендую создать несколько кон- тистический месячный отчет (имеется в виду календар-
фигурационных файлов и добавить необходимые коман- ный месяц) предоставляет информацию на текущий мо-
ды в cron. мент времени.
Например, вот так: Hits By Response Code. Анализ кодов отклика (рис. 2)

№7, июль 2005 87


web
дает возможность понять, насколько хорошо работает сайт ! Hits: Количество файлов, запрошенных с сервера кли-
с точки зрения пользователя. ентами. Включает в себя все графические файлы, CGI
Значения кодов: скрипты (например, обработчики форм), а также html-
! Код 200 – все работает должным образом. страницы.
! Код 206 – буквально – «частичное отображение содер- ! Files: Количество файлов, отправленных сервером по
жания». Причиной этого может быть нажатие пользова- запросам. Включает в себя графические файлы и html-
телем кнопки «stop» до полной загрузки страницы. Это страницы.
не является ошибкой. ! Sites: Количество уникальных мест в Интернете (хостов),
! Код 304 – браузер пользователя (в первую очередь откуда на сайт заходят посетители. Это самый объек-
Netscape) использует сохраненное содержание либо из- тивный показатель, по которому можно определить ко-
влекает страницу из кэша. Это не является ошибкой. личество уникальных посетителей сайта.
! Код 404 – пользователь получил сообщение об ошибке ! Kbytes: Объем информации, которая была переслана
и не увидел содержания страницы. Запрошенный поль- сервером веб-браузерам посетителей. Показывает ко-
зователем документ отсутствует на сервере. Этот код личество исходящего трафика, генерируемого сайтом.
также может выдаваться сервером неавторизованным ! URLs: Самые популярные страницы сайта. Этот показа-
пользователям, отказывая в доступе к закрытым доку- тель поможет понять, над какими страницами, возмож-
ментам. но, стоит поработать.

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. Статистика по дням месяца

88
web

Рисунок 4. Общая статистика по времени суток Рисунок 5. Эта таблица показывает 30 сайтов, с которых
чаще всего приходят пользователи
! Для поддержки русского языка необходимо «пропат- SiteDomain="www.domain.com"
чить» библиотеку GD и пересобрать пакет заново. # Разрешать или нет обновлять статистику через браузер
# (Wbalizer такого не позволяет)
AllowToUpdateStatsFromBrowser=1
AWStats
AWStats (http://awstats.sourceforge.net) – это система пред- А также при работе awstats_configure.pl в конфигураци-
ставления расширенной статистики по веб-сайту. Мощная онный файл веб-сервера добавляются строки:
и удобная программа, которая генерирует статистику на
основе логов веб-сервера и представляет ее графически. Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"
Alias /awstatscss "/usr/local/awstats/wwwroot/css/"
Этот анализатор работает как через интерфейс CGI, так и в Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"
командной строке и отображает всю возможную информа- ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"
цию, содержащуюся в логах, в виде графиков на нескольких <Directory "/usr/local/awstats/wwwroot">
страницах. AWStats анализирует log-файлы таких серверов, Options None
AllowOverride None
как Apache, WebStar и многих других веб-, прокси-, wap-, ftp- Order allow,deny
, почтовых и других серверов. В отличие от Webalizer, раз- Allow from all
</Directory>
работанного на С, AWStats написан на Perl, поэтому и рабо-
тает помедленнее, но этот недостаток компенсируется ку- После создания своего конфигурационного файла и
да большей информативностью полученных результатов. размещения awstats.pl в /cgi-bin (права на файл необходи-
Более прост и понятен в установке. мо сделать 755) можно начать работать двумя способами:
Пакет можно взять по адресу http://awstats.sourceforge.net. ! обновить статистику через командную строку:
Последовательность действий при установке очень проста,
скачиваете архив, распаковываете, затем запускаете про- # ./awstats.pl -conÞg=www.domain.com
грамму awstats_configure.pl. С ее помощью создается файл
типа awstats.www.domain.com.conf, в котором необходимо ! напрямую обратившись к файлу www.domain.com/cgi-
будет явно указать следующие параметры: bin/awstats.pl.

# Путь к файлу с логами При использовании первого способа есть дополнитель-


LogFile="/usr/apache/logs/access _ log"
ные возможности:
# Формат логов. Поддерживаются следующие типы:
# 1 - combined log format
! обработать статистику за нужный месяц (-month=12 для
# 2 - Old IIS log format декабря);
# 3 - Webstar native log format.
# 4 - common log format
! генерировать только отдельные страницы;
LogFormat=1 ! выдать html-код того, что получится прямо на STDOUT,
не записывая в файл.
# Где хранить данные от анализатора
DirData="/awstatsdatadir"
Подробнее о всех функциях можно узнать, задав в ко-
# Размещение ваших CGI, сюда необходимо класть awstats.pl
DirCgi="/cgi-bin" мандной строке команду:

№7, июль 2005 89


web

Рисунок 6. Наиболее популярные страницы сайта Рисунок 7. Информация о принадлежности посетителей


к географическому местоположению
# ./awststs.pl –help www.analog.cx. После инсталляции в конфигурационном
файле были изменены всего три строки:
Внешний вид отображаемой статистики смотрите на
рис. 8. LOGFILE /usr/local/apache/logs/access _ log
OUTFILE /usr/local/apache/htdocs/report.html
Совершенно очевидно, что интерфейс более прият- HOSTNAME "myname"
ный, чем в предыдущем случае, и как мы видим, статисти-
ка несколько полнее, есть информации о запросах от ро- Для обеспечения вывода статистики на русском (или
ботов (позволяет объективнее оценить общую посещае- любом из поддерживаемых языков) в конфигурационный
мость), продолжительность визитов и многое другое. На файл достаточно добавить строку, указывающую место-
мой взгляд, программа AWStats намного лучше справля- расположение языкового файла, например:
ется с возложенными на нее обязанностями, чего не ска-
жешь о Webalizer. LANGFILE ru.lng

Достоинства AWStats: или


! Очень красивый и удобный интерфейс отображения ре-
зультатов сбора статистики. LANGFILE /usr/etc/httpd/analog/lang/ru.lng
! Возможность работать как из командной строки, так че-
рез браузер. В первом случае указанный файл будет искаться во
! Возможность создать выборочные статистические ре- всех возможных местах его расположения. Во втором слу-
зультаты. чае месторасположение указывается явно.
! Присутствует автоматическое определение языка отоб- В результате мы сразу получили работающий анализа-
ражения. тор логов веб-сервера. Analog может запускаться со мно-
жеством параметров (подробнее о них можно узнать из
Недостатки AWStats: справочного руководства по данному продукту). После стар-
! Написан на Perl, за счет этого может медленно рабо- та все полученные результаты отправляются в указанный
тать. файл, и мы, используя наш браузер, можем просмотреть
полученную статистику (см. рис. 9).
Analog Как видно, полученный результат намного отличается
Если для вас статистика, получаемая при помощи описан- от предыдущих образцов, но тем не менее, оценивая соот-
ных инструментов, покажется избыточной, существует еще ношение затраченных усилий на установку к полноте по-
один из анализаторов логов, называемый Analog (http:// лучаемых данных. Analog вполне оправдывает свое пред-
www.analog.cx). Самый простой (как мне показалось) из назначение.
представленных образцов. Инсталяция и настройка заня-
ла не больше 15 минут. Устанавливается из стандартного Достоинства Analog:
rpm-пакета analog-6.0-1.i386.rpm. Домашняя страница http:// ! Быстро настраиваем.

90
web

Рисунок 8. Так выглядитотображаемая статистика в AWStats Рисунок 9. Пример отображения cтатистики Analog
! Подойдет для тех, кому не нужна слишком большая ин- ! Существует проблема с русскими поисковыми строка-
формативность. ми.

Недостатки Analog: В представленном мной обзоре рассматривалась лишь


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

№7, июль 2005 91


книжная полка
Java. Карманный Автоматизация
справочник процессов
Питерд тестирования
Дж. ДеПаскуале И. Винниченко
Несмотря на свой небольшой Эта книга – единственное из-
объем, книга предоставляет дание на русском языке, посвя-
читателю максимум информа- щенное такой актуальной теме,
ции в сжатом виде. Повество- как тестирование программно-
вание начинается с изложения го обеспечения на этапе раз-
основ языка Java. Рассмотре- работки. В вводной части – ос-
ны: управляющие последова- новы автоматизации тестиро-
тельности, простые числовые вания ПО. Далее идет деталь-
типы, логические операторы, ное описание трех основных
расширяющие преобразова- программных средств: Segue
ния, служащие преобразования, основные исполняемые SilkTest, Mercury Interactive WinRunner и Rational Robot. Отде-
приложения. После того как читатель получил общее пред- льная глава посвящена скриптовым языкам, входящим в со-
ставление о синтаксисе языка, автор переходит к описанию став вышеперечисленных продуктов – TSL, 4TEST, SQABasic.
модификаторов, управляющих операторов, типов данных, В ходе описания представлены примеры работы с перемен-
описаний классов. Не остались без внимания и часто ис- ными, массивами данных, операторами сравнения, цикла и
пользуемые классы и интерфейсы из Java API. Весь мате- условными операторами. Приводится подробная информа-
риал изложен в очень удобном виде, каждая тема освяще- ция о элементах интерфейса и функций (window, menu, button,
на достаточно подробно: синтаксис, описание, пример, при- editbox и др.) Рассмотрены вспомогательные функции выше-
мечания. Удобный формат и легкость усвоения изложенно- описанных программных средств. Не остались без внима-
го материала делает эту книгу отличным спутником любого ния функции работы с базами данных и управление процес-
программиста на Java. Книгу можно порекомендовать как сом исполнения. В приложении излагаются методы работы с
новичкам, так и людям с солидным стажем разработки. нестандартными объектами в SilkTest и WinRunner.
Издательство «КУДИЦ-ОБРАЗ», 2005 г. – 128 стр. ISBN Издательство «Питер», 2005 г. – 203 стр. ISBN 5-469-
5-9579-0085-0 (ориг. 0-321-30472-6). 00798-7.

Сетевые Теория и практика


распределенные построения баз
вычисления. данных
Достижения Д. Крёнке
и проблемы Книга является переводом 9
Макс К. Гофф издания фундаментальной ра-
Интереснейшая во всех боты известного специалиста
отношениях книга. Изло- в области баз данных. В кни-
женный материал по сути ге приводится доскональное
является аналитическими описание широкого круга за-
рассуждениями автора на дач и технологий, связанных
тему перманентной техни- с базами данных. Среди рас-
ческой революции. Основ- смотренных тем: проектиро-
ные темы книги: построе- вание баз данных (реляцион-
ние «ландшафтов приспособленности» сетевых распреде- ная модель и нормализация), структурированный язык за-
ленных вычислений, использование законов Мура и Меткла- просов (введение в SQL, использование SQL в приложени-
фа, преодоление восьми классических заблуждений в от- ях, перепроектирование), обработка многопользователь-
ношении распределенных вычислений, улучшение сотруд- ских баз данных (Oracle 9i и SQL server 2000), стандарты до-
ничества и безопасности в отношении распределенных вы- ступа (ODBC, OLE DB, ADO, ASP), рассказано о технологи-
числений. Любопытен материал про интеграцию проводных ях XML и ADO.NET. Так же приводятся подробные сведения
и беспроводных сетей – рассмотрены ключевые проблемы о работе с объектно-ориентированными базами данных. В
существующего ПО. Также рассказано про коммуникаци- приложении вы найдете информацию о структурах данных
онные протоколы и передачу сообщений в распределенных и семантической объектной модели. Изложенный материал
системах, мета-тенденции, семантический web, глобальную очень удачно сочетает теорию и практические работы. Кни-
прозрачность, нанотехнологии, робототехнику. Несмотря на гу можно рекомендовать как программистам, так и админис-
сложность излагаемых тем, книга написана простым и до- траторам баз данных.
ступным языком. Любой человек, независимо от специали- Издательство «Питер», 2005 г. – 859 стр. ISBN 5-94723-
зации, откроет для себя много интересных вещей. 583-8 (ориг. 0-12-101514-1).
Издательство «КУДИЦ-ОБРАЗ», 2005 г. – 320 стр. ISBN Рубрику ведет
5-9579-0072-9 (ориг. 0-13-100152-3). Александр Байрак

№7, июль 2005 93


bugtraq

Переполнение буфера в zlib Обход ограничений безопасности


при обработке сжатых потоков данных в Hosting Controller
Программа: zlib 1.2.2. Программа: Hosting Controller 6.1 HotFix 2.1 и более ран-
Опасность: Высокая. ние версии.
Описание: Уязвимость существует в функции inflate_table() Опасность: Низкая.
файла inftrees.c. Удаленный пользователь может создать Описание: Удаленный авторизованный пользователь мо-
специально сформированный архив, который вызовет пе- жет послать специально сформированный HTTP POST-
реполнение буфера и аварийно завершит приложение или запрос сценарию /Admin/Accounts/AccountActions.asp?Ac
выполнит произвольный код на системе с привилегиями те- tionType=UpdateCreditLimit с произвольным параметром
кущего пользователя. CreditLimit и изменить свои данные о кредите.
URL производителя: www.gzip.org/zlib. URL производителя: hostingcontroller.com.
Решение: Установите исправление с сайта производителя. Решение: Способов устранения уязвимости не существу-
ет в настоящее время.
Отказ в обслуживании в ASP.NET
в RCP-методе Удаленное выполнение произвольного
Программа: Microsoft .NET Framework 1.x, ASP.NET 1.x. кода в Mozilla Firefox
Опасность: Средняя. Программа: Mozilla Firefox версии до 1.0.5.
Описание: Уязвимость существует в функции System.Xml. Опасность: Высокая.
Serialization.Xml.XmlSerializationReader.ReadReferencedEle- Описание: Уязвимость существует из-за недостаточной
ments() в RCP-веб-методе. Удаленный пользователь мо- обработки клонированных объектов. Удаленный пользо-
жет послать методу специально сформированное SOAP- ватель может с помощью специально сформированно-
сообщение и потребить все доступные ресурсы процессо- го сценария выйти за пределы песочницы браузера, по-
ра на системе. лучить доступ к привилегированным объектам и выпол-
URL производителя: microsoft.com. нить произвольный код на системе с привилегиями теку-
Решение: Способов устранения уязвимости не существу- щего пользователя.
ет в настоящее время. Удаленный пользователь может создать специально
сформированную HTML-страницу, которая обращается к
Выполнение произвольного кода внешнему приложению (Flash Player или QuickTime player)
и отказ в обслуживании и затем с помощью javascript: и chrome: URL выполнить про-
в Cisco CallManager извольный код на целевой системе.
Программа: Cisco CallManager 3.2 и более ранние версии, URL производителя: www.mozilla.com.
3.3-3.3(5), 4.0- 4.0(2a)SR2b, 4.1- 4.1(3)SR1. Решение: Установите последнюю версию (1.0.5) с сайта
Опасность: Критическая. производителя.
Описание: 1. Программное обеспечение некорректно об-
рабатывает тайм-ауты сокетов в Realtime Information Server Отказ в обслуживании и выполнение
Data Collection (RISDC). Процесс RisDC.exe может потре- произвольного кода в Kerberos
бить большое количество системных ресурсов и не за- Программа: krb5-1.4.1 и более ранние версии.
крыть сокеты. Опасность: Высокая.
2. Удаленный пользователь может послать большое ко- Описание: 1. Двойное освобождение памяти обнаружено
личество специально сформированных пакетов службе CTI в функции krb5_recvauth(). Удаленный пользователь может
Manager (ctimgr.exe), что приведет к потреблению более 1 Гб выполнить произвольный код на целевой системе.
памяти и рестарту приложения. 2. Уязвимость в реализации центра распределения клю-
3. Удаленный пользователь может послать процессу чей позволяет удаленному пользователю вызвать отказ в
ccm.exe большое количество специально сформирован- обслуживании или выполнить произвольный код на целевой
ных пакетов и заставить приложение потребить до 500 Мб системе. Удаленный пользователь может послать KDC спе-
памяти. циально сформированные TCP-пакеты, освободить случай-
4. Удаленный пользователь может произвести большое ную область памяти и вызвать отказ в обслуживании.
количество неудачных входов в систему и вызвать утечку 3. Удаленный пользователь может послать специаль-
памяти в Admin Service Tool при включенной опции Multi но сформированные TCP- или UDP-пакеты и вызвать од-
Level Admin (MLA). Уязвимое приложение может потребить нобайтовое (single-byte) переполнение стека. Удаленный
до 750 Мб памяти. пользователь может выполнить произвольный код на це-
5. Удаленный пользователь может послать службе левой системе. Уязвимость обнаружена в файлах kdc/do_
aupair.exe специально сформированные пакеты, вызвать as_req.c и kdc/do_tgs_req.c.
переполнение буфера и выполнить произвольный код на URL производителей: web.mit.edu.
целевой системе. Решение: Установите последнюю версию (krb5-1.4.2) от
URL производителя: www.cisco.com. производителя.
Решение: Установите исправление с сайта производителя.
Составил Александр Антипов

94
подписка на II полугодие 2005
Российская Федерация ! Казахстан – по каталогу «Российская Пресса» через
! Подписной индекс: 81655 ОАО «Казпочта» и ЗАО «Евразия пресс»
Каталог агентства «Роспечать» ! Беларусь – по каталогу изданий стран СНГ через РГО
! Подписной индекс: 87836 «Белпочта» (220050, г.Минск, пр-т Ф.Скорины, 10)
Объединенный каталог «Пресса России» ! Узбекистан – по каталогу «Davriy nashrlar» российские
Адресный каталог «Подписка за рабочим столом» издания через агентство по распространению печати
Адресный каталог «Библиотечный каталог» «Davriy nashrlar» (7000029, Ташкент, пл.Мустакиллик,
! Альтернативные подписные агентства: 5/3, офис 33)
Агентство «Интер-Почта» (095) 500-00-60, курьерская ! Армения – по списку номенклатуры «АРЗИ» через ГЗАО
доставка по Москве «Армпечать» (375005, г.Ереван, пл.Сасунци Давида, д.2)
Агентство «Вся Пресса» (095) 787-34-47 и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул.Сарьяна,
Агентство «Курьер-Прессервис» 22)
Агентство «ООО Урал-Пресс» (343) 375-62-74 ! Грузия – по списку номенклатуры «АРЗИ» через АО
! Подписка On-line «Сакпресса» ( 380019, г.Тбилиси, ул.Хошараульская, 29) и
http://www.arzy.ru АО «Мацне» (380060, г.Тбилиси, пр-т Гамсахурдия, 42)
http://www.gazety.ru ! Молдавия – по каталогу через ГП «Пошта Молдавей»
http://www.presscafe.ru (МД-2012, г.Кишинев, бул.Штефан чел Маре, 134)
по списку через ГУП «Почта Приднестровья» (МD-33-
СНГ 00, г.Тирасполь, ул.Ленина, 17)
В странах СНГ подписка принимается в почтовых отделе- по прайслисту через ООО Агентство «Editil Periodice»
ниях по национальным каталогам или по списку номен- (2012, г.Кишинев, бул. Штефан чел Маре, 134)
клатуры АРЗИ: ! Подписка для Украины:
! Азербайджан – по объединенному каталогу российских Киевский главпочтамп
изданий через предприятие по распространению печа- Подписное агентство «KSS»
ти «Гасид» (370102, г. Баку, ул. Джавадхана, 21) Телефон/факс (044)464-0220

Подписные
индексы:

81655
по каталогу
агентства
«Роспечать»
87836
по каталогу
агентства
«Пресса
России»

№7, июль 2005 95


СИСТЕМНЫЙ АДМИНИСТРАТОР
№7(32), Июль, 2005 год

РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец
В СЛЕДУЮЩЕМ
Ответственный секретарь
Наталья Хвостова
sekretar@samag.ru
НОМЕРЕ:
Технический редактор
Владимир Лукин
Редакторы DSPAM: некоторое количество серверов, на
Андрей Бешков персонифицированная всех установлена AIDE, базу которой
Алексей Барабанов система фильтрации рекомендуется хранить на сменном но-
Михаил Платов спама сителе с целью не допустить попада-
Фильтрация почты, особенно на сер- ния ее в чужие руки. Как реализовать
РЕКЛАМНАЯ СЛУЖБА вере провайдера, затруднена тем, что это требование? Не вручную ведь ко-
тел./факс: (095) 928-8253 администратор не может брать на се- пировать базу с каждого сервера? Для
Константин Меделян бя вынесение вердикта, что доставить автоматизации этой задачи и был раз-
reсlama@samag.ru абоненту, а что нет. Система DSPAM работан скрипт AIDEControl.
позволяет переложить принятие тако-
Верстка и оформление го решения на пользователя. SAP + MySQL = MaxDB
maker_up@samag.ru При выборе СУБД для проекта перед
Дизайн обложки Asterisk и Linux: нами часто встаёт проблема выбора
Николай Петрочук миссия IP-телефония между низкой (часто нулевой) стои-
Действие 3 мостью открытых БД, таких как MySQL
По вопросам распространения Мы достаточно подробно изучили воз- или PostgreSQL, и мощью и широтой
обращайтесь по телефону: можности Asterisk в сопряжении с го- возможностей «серьёзных» СУБД –
(095) 928-8253 (доб. 120) родской телефонной сетью. Теперь, Oracle, DB2, MSSQL. MaxDB от компа-
после того как в нашем распоряже- нии MySQL AB, наследница SAP DB –
107045, г. Москва, нии оказалась полноценная мини-АТС, прекрасная альтернатива такому вы-
Ананьевский переулок, дом 4/2 стр. 1 самое время приступить к плановому бору. Это промышленная, SAB-серти-
тел./факс: (095) 928-8253 улучшению ее возможностей. Начнем с фицированная база данных, распро-
Сайт журнала: www.samag.ru вещей наиболее приятных – облегчим страняемая под лицензией GPL. Уста-
процесс администрирования. новим MaxDB и познакомимся побли-
РУКОВОДИТЕЛЬ ПРОЕКТА же с возможностями, которые она пре-
Петр Положевец Управление удаленными доставляет.
УЧРЕДИТЕЛИ базами AIDE
Владимир Положевец Программа AIDE предназначена для Копирование без границ
Александр Михалев контроля за изменениями файловой Копировщики лазерных дисков совер-
ИЗДАТЕЛЬ системы посредством создания отде- шенствуется с каждым днем, но и раз-
ЗАО «Издательский дом льной базы, содержащей информацию работчики защитных механизмов не
«Учительская газета» об атрибутах файлов – дате и време- дремлют, тем не менее, новые защи-
ни создания и модификации, размере, ты тут же ломаются. Почему? Предла-
Отпечатано типографией владельце, а также контрольную сумму гаем вам обзор наиболее популярных
ГП «Московская Типография №13» содержимого файла для проверки его ошибок и конструктивных просчетов
Тираж 8400 экз. на неизменность содержимого. Пра- с рекомендациями по их устранению,
вильное использование AIDE гаранти- а так же законченный алгоритм чрез-
Журнал зарегистрирован рует в достаточной степени неизмен- вычайно стойкой защиты, не копируе-
в Министерстве РФ по делам печати, ность файлов. Но, допустим, имеется мой никаким копировщиком.
телерадиовещания и средств массо-
вых коммуникаций (свидетельство
ПИ № 77-12542 от 24 апреля 2002 г.) Уважаемые читатели!
За содержание статьи ответствен- Спешите оформить подписку
ность несет автор. За содержание на второе полугодие 2005 года!
рекламного обьявления ответствен-
ность несет рекламодатель. Все пра- Приобрести новые и старые номера журнала
ва на опубликованные материалы за- вы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.
щищены.
Доставка почтой в любую точку России.

96

Вам также может понравиться